Я предпочитаю иметь один контрольный пример для каждого метода.
Во-первых, легче увидеть, какие случаи тестируются, если они разбиты на методы, а не искать комментарии, встроенные в код. Большинство IDE предоставят вам краткое описание методов, поэтому вместо того, чтобы сказать «я тестировал пограничный XYZ?» и затем ищите комментарий или ищите код, который устанавливает этот пограничный регистр, вы просто ищете метод с именем setupContextEdgeCaseXYZ()
.
Вторая причина заключается в том, что если у вас есть несколько дел вместе, один может потерпеть неудачу, а другие никогда не будут выполнены.
testDefaultCase()
testInvalidInput()
testEdgeCase1()
testEdgeCase2()
С этой структурой было бы легче определить, что проверка ввода плохая, и крайний случай 2 обрабатывается неправильно, но остальные в порядке (и вы можете обнаружить, что два сбойных случая связаны и проблема диагностируется быстрее) .
Третья причина заключается в том, что вы можете случайно оставить значения из предыдущего набора тестов, которые незаметным образом делают недействительным последний тест. Простой пример:
@Test
public void testMyMethod() {
//test default
String test = Foo.bar(null);
assertEquals("foo", test);
//test case 1
Foo.bar(aValue);
//Oops forgot to set value above, this passes regardless of
//what the above call does
assertEquals("foo", test);
}
Разбивая регистры на части, вы можете избежать ошибок, описанных выше, поскольку это может привести к ошибке компиляции или предупреждению.