У меня есть класс с одним открытым методом и многими закрытыми методами, которые запускаются в зависимости от того, какой параметр передается в открытый метод, поэтому мой код выглядит примерно так:
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 ()]
Разделите все приватные методы в отдельный класс и создайте интерфейс.
Сделайте все методы виртуальными, и в моих тестах создайте новый класс, который наследуется от этого класса и переопределите методы.
Есть ли другие варианты для тестирования вышеуказанного класса, которые были бы лучше того, что я перечислил?
Если вы выберете одну из тех, что я перечислил, вы можете объяснить, почему?
Спасибо