在测试调用构造函数的代码时,有没有办法构建mock而不是实例?
例如:
public class ClassToTest
{
public void MethodToTest()
{
MyObject foo = new MyObject();
Console.WriteLine(foo.ToString());
}
}
在这个例子中,我需要创建一个单元测试,确认在ClassToTest实例上调用MethodToTest确实会输出新创建的MyObject实例的ToString()方法的结果。
我无法看到一种实际测试'ClassToTest'类的方法;测试此方法实际上会测试'myObject.ToString()'方法以及MethodToTest方法。
答案 0 :(得分:3)
不是真的。由于其设计,您的ClassToTest
很难测试。如果您希望能够替换模拟对象的依赖关系,那么您需要考虑如何注入这些依赖关系 - 但只是在构造函数中创建它们并不是一种可以帮助您的方法。你可以使用构造函数注入:
public class ClassToTest
{
MyObject _foo;
public void MethodToTest(Myobject foo)
{
_foo = foo;
Console.WriteLine(foo.ToString());
}
}
或者您可以使用属性注入:
public class ClassToTest
{
public MyObject Foo { get; set; }
public void MethodToTest()
{
}
}
前者可能更适合你的例子,因为你想在那里写出控制台;当您的依赖项必须依赖于对象而不是可选的依赖项时,它通常是最好的方法。
你可能比探索dependency injection和inversion of control的概念做得更糟。