gpt4 book ai didi

c# - 在单元测试中构建模拟

转载 作者:行者123 更新时间:2023-11-30 16:33:34 24 4
gpt4 key购买 nike

在测试调用构造函数的代码时,有什么方法可以构造模拟实例而不是真实实例?

例如:

public class ClassToTest
{
public void MethodToTest()
{
MyObject foo = new MyObject();
Console.WriteLine(foo.ToString());
}
}

在此示例中,我需要创建一个单元测试,以确认在 ClassToTest 实例上调用 MethodToTest 确实会输出新创建的 MyObject 实例的 ToString() 方法的任何结果。

我看不出有什么方法可以孤立地实际测试“ClassToTest”类;测试此方法实际上会测试“myObject.ToString()”方法以及 MethodToTest 方法。

最佳答案

不是真的。您的 ClassToTest 因其设计而难以测试。如果您希望能够将其依赖项换成模拟对象,那么您需要考虑如何注入(inject)这些依赖项 - 但仅在构造函数中创建它们并不是一种可以帮助您的方法。您可以使用构造函数注入(inject):

public class ClassToTest
{
MyObject _foo;
public void MethodToTest(Myobject foo)
{
_foo = foo;
Console.WriteLine(foo.ToString());
}
}

或者你可以使用属性注入(inject):

public class ClassToTest
{
public MyObject Foo { get; set; }
public void MethodToTest()
{
}
}

鉴于您想在那里写出控制台,前者可能更适合您的示例;当您的依赖项是对象的必须依赖项而不是可选依赖项时,这通常是最好的方法。

你可能比探索 dependency injection 的概念做得更糟和 inversion of control .

关于c# - 在单元测试中构建模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3037131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com