I have some methods in my app that make http requests. Is there a good way to simulate network failures and bad responses for the unit tests?
Maybe Spring test mocks would be of some assistance.
Suitable Mock Objects should let you perform such simulations easily; if you're unfamiliar with the concept, there's a good tutorial here.
What we do in this situation is abstract the layer that's making the call. Instead of having your logic directly make the http request, have your code call a function. Within that function can be something like:
if (in_test) {
response = get_test_response();
} else {
response = make_http_request();
}
Then you can have your unit tests set some value accessible by the get_test_response() function. This way you can programatically change what the result of that call will be.
Pull out your lan wire, or turn off your wireless router while the requests are being made :)
For network failures nothing beats first unplugging your computers ethernet cable (or d/c it's wireless) and then unplugging whatever cable gives you access to the cloud.
If by bad responses you mean HTTP errors you can write ASP scripts that will always throw specific errors. If you want to test malformed HTTP packets you'll have to write a simple socket app to do that.
Have You tried HTTPUnit and JWebUnit?