Недавно я читал книгу Роя Ошерова The Art Of Unit Testing и думал, как поступить в такой ситуации:
Предположим, что у меня есть большой метод, который выполняет бизнес-процесс на основе переданных параметров, выполняя различные задачи:
public void MonsterMehtod(Parameters p)
{
// Some processes to accomplish TASK_A
// ....
// Some processes to accomplish TASK_B
// ....
// Some processes to accomplish TASK_C
// ....
}
И я хочу написать тест(ы) по этому методу.
Итак, если я исключаю этот большой метод из более мелких методов, таких как этот:
public void MonsterMethod(Parameters p)
{
Task_A(p);
Task_B(p); //Can behave different depending on Task_A(p) results
Task_C(p); //Can behave different depending on Task_A(p) and Task_B(p) results
}
И я пишу модульные тесты для каждой задачи следующим образом:
[Test]
public void Task_A_AllPossibleConditionsWithParameterP_ExpectedBehaviours() {}
[Test]
public void Task_B_AllPossibleConditions_ExpectedBehaviours()
{
// Tests all possible expected behaviours based on injected parameters
// Tests all possible expected behaviours based on method Task_A(Prameters p) results
}
[Test]
public void Task_C_AllPossibleConditions_ExpectedBehaviours()
{
// Tests all possible expected behaviours based on injected parameters
// Tests all possible expected behaviours based on method Task_A(Prameters p) results
// Tests all possible expected behaviours based on method Task_B(Prameters p) results
// Tests all possible expected behaviours based on method Task_C(Prameters p) results
}
Итак, в конце концов, имеет ли смысл писать еще один тест для MonsterMethod(Parameters p), например:
[Test]
public void MonsterMehtod_AllPossibleParameterConditions_ExpectedBehaviours {}
Может быть, я могу хотя бы написать тест, чтобы проверить, вызываются ли все методы Task_A(), Task_B(), Task_C() , но пока у меня есть все модульные тесты для каждой подзадачи, стоит ли проводить еще один тест ( может быть, его следует называть интеграционным тестом, а не модульным тестом) для MonsterMethod (параметры p), который содержит все эти подзадачи?