Yeah you can send zero to an address. It would be treated as a non-standard (would it be invalid??) tx and likely not be mined, but I bet if you included a large miner fee somebody might do it. Any valid tx can be put in a block, it's just that most miners don't put in non-standard tx's. But if you can get somebody to mine it, and it's a valid tx, and they mine it into a block, by god it's in the blockchain. Eligius is the only pool currently mining non-standard transactions. So connect to them and include a large miner fee, and your tx if it's valid, it will probably get mined within a few days. Leave your client running and re-broadcast it occasionally.
Usually, people send 0 not to an address, but to a *provably unspendable output*, like
this tx here where the guy send 0 to the "address" and the rest of the input (all of it) went to miner fees. The output (recipient) was an OP_RETURN output, which means it is not allowed to be referenced as a future input, so any money sent to it is provably lost forever. So if he had sent money to it instead of zero, that money would have been lost.
Edit: As for answering your original question. All bitcoin addresses include a checksum, which means that if anything in the address is altered, it will be immediately identified as mis-typed and it won't be a valid address. The actual raw tx however is just the ripemd160 hash without the checksum, but all ripemd160 hashes correspond to a bitcoin address, it's just that you can create a public address which you don't know, and nobody knows, the private key for. As for testing a private key, no you don't need to send money to test it. Any 32 byte hex string from 0000000000000000000000000000000000000000000000000000000000000001 to fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140 is a private key. The Wallet Import Format versions that start with 5 or K or L are base58 encoded versions of that hex, and they, like addresses, include a checksum, so they know if you mis-typed something.
Your bitcoin client will know if you try to import an incorrect key. For example, here's a randomly created private key:
5JACuvzpeMyASNGLrcBux1gBkSEJqUWc6xxg5MvnBUrmqPkuPMQ
I'm going to change the last letter from a capital Q to lower case, and get
5JACuvzpeMyASNGLrcBux1gBkSEJqUWc6xxg5MvnBUrmqPkuPMq
If I try to import that, I'm going to get an error, because it's not a valid WIF private key. The checksum doesn't match. It doesn't correspond to *any possible* private key, so it's not valid.
A "checksum" is a hash of a message. So for example, I want to send you "hello" and make sure you get it without any mistakes. So I send you "hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" and your client just already knows that the last 64 characters of any message I send you are the checksum hash. So it goes and hashes "hello" and verifies that it comes out with 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824, and it then checks the message you sent and verifies that everything lines up. If you change any letter anywhere in the message "hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824" it will not compute as valid. (Or rather, it's extremely unlikely it will. And also, you could just send an entirely different message which is still valid, like "goodbye82e35a63ceba37e9646434c5dd412ea577147f1e4a41ccde1614253187e3dbf9". That's why in bitcoin, transactions include both checksums on the addresses, as well as
digital signatures from the private keys, which are basically special checksum hashes that can only be generated by the private key. That way, the client knows both that the message isn't tampered with and also that the private key has approved the transaction.)