У меня есть класс с одним общедоступным методом и множеством частных методов, которые запускаются в зависимости от того, какой параметр передается общедоступному методу, поэтому мой код выглядит примерно так:
public class SomeComplexClass
{
IRepository _repository;
public SomeComplexClass()
this(new Repository())
{
}
public SomeComplexClass(IRepository repository)
{
_repository = repository;
}
public List<int> SomeComplexCalcualation(int option)
{
var list = new List<int>();
if (option == 1)
list = CalculateOptionOne();
else if (option == 2)
list = CalculateOptionTwo();
else if (option == 3)
list = CalculateOptionThree();
else if (option == 4)
list = CalculateOptionFour();
else if (option == 5)
list = CalculateOptionFive();
return list;
}
private List<int> CalculateOptionOne()
{
// Some calculation
}
private List<int> CalculateOptionTwo()
{
// Some calculation
}
private List<int> CalculateOptionThree()
{
// Some calculation
}
private List<int> CalculateOptionFour()
{
// Some calculation
}
private List<int> CalculateOptionFive()
{
// Some calculation
}
}
Я придумал несколько способов протестировать этот класс, но все они кажутся слишком сложными или раскрывают методы больше, чем мне хотелось бы. Варианты пока такие:
Установите все частные методы на внутренние и используйте [assembly: InternalsVisibleTo()]
Выделите все приватные методы в отдельный класс и создайте интерфейс.
Сделайте все методы виртуальными и в моих тестах создайте новый класс, наследуемый от этого класса, и переопределите методы.
Есть ли другие варианты тестирования вышеуказанного класса, которые были бы лучше, чем то, что я перечислил?
Если бы вы выбрали один из тех, что я перечислил, можете ли вы объяснить, почему?
Спасибо