I would expect the developer to do some initial testing before they commit any changes and to have satisfied themselves that the code works. I would then expect the developer to feed into the test cases any specific 'white box' knowledge they have. For instance details any other areas of the code which may have been affected.
The main objection to developers testing their own code is that you are only testing one view point. The developer has read the specification and interpreted it. Hopefully the specification is clear, complete and unambiguous, but this is not always the case. The developer may have misunderstood part of the specification. If they test their own code then this won't be caught as they will find the function operates as they expect.
Different people will also tend to use a product in different way and take different routes through the code as a result. A developer will have ensured that the code works for them, but may not have considered an edge-case that another tester may find.