Тест исключения (Exception Test)
Как можно протестировать ожид аемое исключение? Перехватите
исключение и игнорируйте его, тест д олжен терпеть неуд ачу только в
случае, если исключение не сгенерировано.
Пред положим, что мы пишем код , о существляющий поиск
значения. Если значение не обнаружено, мы хотим сгенерировать
исключение. Тестирование механизма поиска выполняется отно сительно
про сто:
public void testRate() {
exchange.addRate("USD", "GBP", 2);
int rate = exchange.findRate("USD", "GBP");
assertEquals(2, rate);
}
Тестирование исключения может оказаться неочевид ным. Вот как
мы это д елаем:
public void testMissingRate() {
try {
exchange.findRate("USD", "GBP");
fail();
} catch (IllegalArgumentException expected) {
}
}
Если метод findRate() не генерирует исключения, произойд ет
обращение к метод у fail() – это метод xUnit, который д оклад ывает о
том, что тест потерпел неуд ачу. Обратите внимание, что мы
перехватываем
только
то
исключение,
которое
д олжно
быть
сгенерировано метод ом findRate(). Благод аря этому, если буд ет
сгенерировано какое-либо д ругое (неожид анное д ля нас) исключение
(включая сбой метод а assert), мы узнаем об этом.
Все тесты (All Tests)
Как можно запустить все тесты вместе? Созд айте тестовый набор,
включающий в себя все имеющиеся тестовые наборы, – од ин д ля
кажд ого пакета (package) и од ин, объед иняющий в себе все тесты
пакетов д ля всего приложения.
Пред положим, вы д обавили под класс класса TestCase и в этот
под класс вы д обавили тестовый метод . В след ующий раз, когд а буд ут
выполняться все тесты, д обавленный вами тестовый метод также
д олжен быть выполнен. (Во мне опять про снулась привычка
д ействовать в стиле TDD – д олжно быть, вы заметили, что пред ыд ущее
пред ложение – это эскиз теста, который я, наверное, написал бы, если
бы не был занят работой над д анной книгой.) К сожалению, в
большинстве реализаций xUnit, равно как и в большинстве IDE, не
под д ерживается станд артный механизм запуска абсолютно всех тестов,
поэтому в кажд ом пакете необход имо опред елить класс AllTests,
который реализует статический метод suite(), возвращающий объект
класса TestSuite. Вот класс AllTests д ля «д енежного» примера:
public class AllTests {
public static void main(String[] args) {
junit.swingui.TestRunner.run(AllTests.class);
}
public static Test suite() {
TestSuite result = new TestSuite("TFD tests");
result.addTestSuite(MoneyTest.class);
result.addTestSuite(ExchangeTest.class);
result.addTestSuite(IdentityRateTest.class);
return result;
}
}
Вы также д олжны включить в класс AllTests() метод main(),
благод аря чему класс можно буд ет запустить напрямую из IDE или из
команд ной строки.
Do'stlaringiz bilan baham: |