Если вы хотите написать настоящий тестовый модуль для изоляции вашего кода, тогда я согласен, что ваш тест не подходит. Если вы хотите написать больше интеграционного теста, тогда ваш подход подойдет.
Для своих изолирующих элементов я создаю их так, чтобы они тестировали только тестируемый класс. Я использую EasyMock , чтобы макетировать все сотрудничающие классы. Так что в этом случае я бы создал макет для httpClient. Я бы настроил тест, в котором mock выдает исключение, а затем утверждаю, что тестируемый класс обрабатывает исключение, как и ожидалось. Фрагменты кода ниже могут дать вам представление о том, что я имею в виду.
private DefaultHttpClient httpClient;
private ClassUnderTest classUnderTest;
@Before
public void setUpTest() {
httpClient = createMock(DefaultHttpClient.class);
@Test
public void performARequestThatThrowsAnIOException() {
expect(httpClient.execute(post)).andThrow(iOException);
replayAll();
try {
classUnderTest.executeMethodUnderTest();
fail("This test should throw an IOException.");
} catch (IOException e){
verifyAll();
}
Выше предполагается, что метод в тестируемом классе выдает исключение. Если исключение поймано, то вы бы написали выше по-другому.