Я ищу, чтобы лучше понять, я должен проверять функции, которые имеют много подстановок или подфункций.Как я должен выполнять функции тестирования с множеством подфункций?
Скажем, у меня есть функции
// Modify the state of class somehow
public void DoSomething(){
DoSomethingA();
DoSomethingB();
DoSomethingC();
}
Каждая функция здесь является публичной. Каждая подфункция имеет 2 пути. Поэтому, чтобы проверить каждый путь для DoSomething()
, у меня было бы 2 * 2 * 2 = 8 тестов. Написав 8 тестов для DoSomething()
, я также косвенно проверил подфункции.
Так что я должен тестировать это так или вместо этого писать блок-тесты для каждой из подфункций, а затем записывать только один тестовый пример, который измеряет конечное состояние класса после DoSomething()
и игнорирует все возможные пути? Всего 2 + 2 + 2 + 1 = 7 тестов. Но неужели плохо, что тестовый случай DoSomething()
будет зависеть от других единичных тестов, чтобы иметь полный охват?
Проверьте результаты каждого метода. Вам нужно только проверить, что DoSomething вызывает другие методы, потому что это все, что он делает. – artm
@artm Я вижу, но разве это не делает тест менее надежным? Если я когда-либо решил изменить DoSomething(), тест будет разорван. Но я полагаю, что это будет легкий тест, который изменится, поскольку он настолько прост. – roverred
Вы должны * не * проверить, что DoSomething() вызывает другие методы * точно *, потому что изменение в том, как DoSomething() внутренне работает, нарушит его тест. Проверка черного ящика FTW. Тестирование с помощью белого ящика (с помощью mocks и т. Д.) Полезно только при тестировании вещей, которые не возвращают результаты, и поэтому по своей природе единственное, что можно проверить, это то, что они называют и как они это называют. –