Написание Unit теста
Подскажите, пожалуйста, как правильно написать unit тест на такой код:
public class DashboardResultGenerator
{
public static DashboardResult GetResult(DashboardType dashboardType, Userconnection userconnection)
{
switch(dashboardType)
{
case DashboardType.CaseQueueSl:
{
return new CaseQueueSlResultGenerator().GetResult(dashboardType, userconnection);
}
case DashboardType.CaseQueueLcr:
{
return new CaseQueueLcrResultGenerator().GetResult(dashboardType, userconnection);
}
}
return new DashboardResult();
}
}
Ответы (1 шт):
Юнит-тесты под код не пишут. Юнит-тесты пишут под исходные требования и ограничения.
Судя по всему, какие изначально требования и ограничения ставились при написании приведенного вами кода вы не знаете... Соответственно, вам предстоит трудоемкая задача - заняться реверсингом требований и ограничений к этому куску кода, ко всем вызываемым в нем методам(здесь - CaseQueueLcrResultGenerator::GetResult() и все что вызывается глубже..), ко всем участкам кода вызывающих этот код...
Нужно досконально разобраться в том, зачем он вообще был написан. Получится что-то вроде:
Для того что бы <здесь описать необходимость применения метода GetResult в других классах>, необходим метод, который должен:
- В зависимости от значения параметра
dashbordType, должен вызывается метод GetResult() из новых экземпляров классов(<описать почему важно всегда создавать новые экземпляры этих классов>)CaseQueueSlResultGeneratorлибоCaseQueueLcrResultGenerator, получая на выходе <что должны получить?> - В зависимости от значения полей в объекте переданном в параметре
userConnectionдолжны на выходе получить <что именно?> - При определенных "хитрых" сочетаниях
dashbordTypeиuserConnectionдолжны на выходе получить <что?> - Если значение параметра
dashbordTypeне поддерживается, то должен возвращаются пустой результат..
Ну и дальше уже можно тривиально написать юнит-тест - просто написав каждое требование или ограничение в виде отдельного тест-кейса..