I just wanted to point out that emulation and hardware very different. It is still interesting nonetheless.
That's not entirely true.
If they are very different then the emulator is a failure. The point of an emulator is to emulate the HW, so in theory if the emulator is accurate enough, the results on the emulator should be the same as the results on the hw.
The problem is that many emulators out there are not fully accurate, so you get inconsistencies.
However, for many of the older consoles there already are very accurate emulators like bsnes as you pointed out, and for nes there's nestopia/nintendulator/ and some others.
It is likely that no emulator out there is 100% accurate to the hw, but the differences between an accurate emulator and the hw usually occur when you do illegal or hacky stuff with the system, or do something that demands cycle accurate timing. I.e. reading addresses of memory which are supposed to be undefined/indeterminate; or doing illegal instructions which the hw wasn't designed to do; or relying on the ppu to issue a vsync on an exact ppu cycle.. etc..
Anyways you are correct that you should test on the real hw, and can't expect an emulator to be fully accurate. But if you test with different emulators and they all have the same bug, it is a strong indication that it is something wrong with your code/game. I agree that testing on emulators and the real hw is different, but i disagree with the emphasis that they're 'very' different, unless you're testing with inaccurate emulators.