我被说服了单元测试的有用性,但我真的不明白这些规则..
如果我有一个与另一个
相关联的课程public class MyClass
{
private SecondClass MySecondClass;
public MyClass()
{
this.MySecondClass = new SecondClass ();
}
}
该字段是私有的,Myclass有这样的方法:
public ThirdClass Get()
{
return this.MySecondClass.Get();
}
我该如何测试?我假设我必须测试MyClass.get()
方法是否正在调用MySecondClass.Get()
!但我无法模仿SecondClass
并将其分配给第一个,因为它是一个私有字段。所以我真的很想知道如何测试它...
由于
答案 0 :(得分:4)
您无法轻松对此进行单元测试,因为实例化是硬编码的。你可以使用构造函数注入来模拟它:
public class MyClass
{
private SecondClass _mySecondClass;
public MyClass(SecondClass mySecondClass)
{
_mySecondClass = mySecondClass;
}
public ThirdClass Get()
{
return _mySecondClass.Get();
}
}
现在,在你的单元测试中,你可以提供你喜欢的这个类的任何实例。这就是控制反转的原理。类不再负责实例化其依赖项,它是传递依赖项的那些类的使用者。