Developers should test their own work. Letting developers push untested work to a QA team, or their developer colleagues is a Really Bad Idea. It wastes the time of developers and testers alike, and ruins relationships.
However, that is not always enough. Developers are likely to follow a happy path through the system, or be blind to some idiosyncrasies that they have been exposed to over and over throughout development.
Another point is that there can be a number of layers of communication between specification and deployment. This can lead to a Chinese Whispers effect on the final deployable. It is best if whoever defined the requirement or bug report tests that it works the way they wanted.