I do basically all of my 6502 development using assembly. I use ca65, which is the assembler that comes with the cc65 package. I use it because it's what everyone else seems to use in general, and what TangentDelta uses in particular. It's a competent assembler, and it's easy to script builds using Makefiles, and having srec_cat spit out the formats I need. srec_cat can, among like a zillion other things, output OSI load formats for both 65A and 65V (I added 65A support not that long ago).
IMO C on 6502 is kinda missing the point. If you're going to write in C, why not use a better CPU for it? Plus, one does not fully appreciate the 6502 until you start having to get serious with assembly.
BASIC is fine for quick stuff that doesn't need to be fast. I still haven't slung enough FORTH to have a valid opinion on it. I don't think I've used other languages on 6502.
I test on real hardware, which is usually either my Challenger III (or at least its board set) or the R6501Q SBC. I use the R6501Q SBC a lot for small personal projects due to the built-in I/O, timers, etc. I also generally want open source stuff I write to work on the R6501Q SBC since, you know, we sell it to people...and I'd like them to have stuff to run on it
#1 handiest development aid on any system is the ability to load programs in over a serial port and run/debug them. I tend to use Intel HEX format on 6502 since it's not like e.g. Motorola 6800 where everything expects S-Record. I don't know if MOS's load format was adopted anywhere outside the KIM-1. Anyway, my first thing on most 6502 systems is to get eWoz or nowadays GWMON-65 going so I can assemble programs on a modern machine, then zap the object code into memory over serial.