Написание 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 шт):

Автор решения: Sergey Rufanov

Юнит-тесты под код не пишут. Юнит-тесты пишут под исходные требования и ограничения.

Судя по всему, какие изначально требования и ограничения ставились при написании приведенного вами кода вы не знаете... Соответственно, вам предстоит трудоемкая задача - заняться реверсингом требований и ограничений к этому куску кода, ко всем вызываемым в нем методам(здесь - CaseQueueLcrResultGenerator::GetResult() и все что вызывается глубже..), ко всем участкам кода вызывающих этот код...

Нужно досконально разобраться в том, зачем он вообще был написан. Получится что-то вроде:

Для того что бы <здесь описать необходимость применения метода GetResult в других классах>, необходим метод, который должен:

  1. В зависимости от значения параметра dashbordType, должен вызывается метод GetResult() из новых экземпляров классов(<описать почему важно всегда создавать новые экземпляры этих классов>) CaseQueueSlResultGenerator либо CaseQueueLcrResultGenerator, получая на выходе <что должны получить?>
  2. В зависимости от значения полей в объекте переданном в параметре userConnection должны на выходе получить <что именно?>
  3. При определенных "хитрых" сочетаниях dashbordType и userConnection должны на выходе получить <что?>
  4. Если значение параметра dashbordType не поддерживается, то должен возвращаются пустой результат..

Ну и дальше уже можно тривиально написать юнит-тест - просто написав каждое требование или ограничение в виде отдельного тест-кейса..

→ Ссылка