我有一个公共的方法和其运行取决于传递什么参数的公共方法,所以我的代码中的许多私有方法的类看起来类似:单元测试复杂的类有许多私有方法
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
}
}
我想过几种方法来测试这个类,但它们都显得过于复杂或比我想的更多地暴露方法。选项到目前为止有:
设置所有私有方法内部和用[组件:InternalsVisibleTo()]
分离出所有的私有方法成一个单独的类和创建的接口。
使所有的方法都是虚拟的,并在我的测试中创建一个从此类继承并重写方法的新类。
是否有任何其他选项用于测试上述类,这会更好地列出我所列出的内容?
如果你会选择我列出的其中一个,你可以解释为什么?
感谢
这是切你的问题,但如果/ else结构令我奇怪。从设计的角度来看,您是否经常拥有调用多种类型计算的类的客户,或者一个客户通常只会调用一个选项? – 2010-04-29 15:44:20
这是我的实际班级的简化版本,但许多客户通常会调用很多选项。 – lancscoder 2010-04-29 15:49:55