C#测试-构造函数调用中的模拟类

用户名

我是新来使用MoqXunit在Visual Studio 2019。

我想模拟测试类的构造函数中正在调用的类的构造函数调用。我的问题的简单演示:

public class MockedClass : IMockedClass
{
   public MockedClass()
   {
      // don't call this
   }
   public List<string> Function1()
   { /* return a List<string> here */ }
}
public class MyClass
{
   readonly IMockedClass mockedClass = null;
   public MyClass()
   {
      mockedClass = new MockedClass();
   }
   public string Function2()
   { /* return a string here */ }
}
public class MyClassTest
{
   [Fact]
   public string Function2Test()
   {
      var returnMock = new List<string>() { "1", "2", "3" };
      var mockMockedClass = new Mock<IMockedClass>();
      mockMockedClass.Setup(x => x.Function1()).Returns(returnMock);
      var myClass = new MyClass();
      var result = myClass.Function2();
      ...
   }
}

我的问题是,在测试Function2Test的构造函数MyClass被调用,其调用构造函数MockedClass但是我不希望MockedClass被调用的构造函数

我如何嘲笑的构造函数MockedClass

我认为您可能需要稍微修改代码。您会看到,从接口的其他部分实例化接口本身本身并不会自动更改其他实现的行为。通常,您希望通过Dependency Injection将模拟的实现注入经过测试的代码中

public class MyClass
{
    readonly IMockedClass mockedClass = null;
    public MyClass(IMockedClass c)
    {
        mockedClass = c; // now you'll get the correct implemetation
    }
    public string Function2()
    { /* return a string here */ }
}
void Main()
{

        var returnMock = new List<string>() { "1", "2", "3" };
        var mockMockedClass = new Mock<IMockedClass>(); // get your mock here
        mockMockedClass.Setup(x => x.Function1()).Returns(returnMock);
        var myClass = new MyClass(mockMockedClass.Object); // inject it here
        var result = myClass.Function2();
}

然后,您将需要设置依赖注入容器,以便MockedClass在实际应用程序代码运行时为您提供具体的信息根据您的代码和要求,会有很多选项,因此在这里我不建议使用特定的框架。

从理论上讲,您可以在当前代码结构中模拟出该类。我有可能看到您如何选择假货或奇特的反射技术。但是,它可能会为克服似乎是社区公认的最佳实践而付出很多努力。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在派生类 C++ 的构造函数中调用基类的构造函数

模拟复制构造函数的C ++类

在C ++中调用基类模板构造函数

C ++:在基类的构造函数中调用重写的方法

在C#中调用基本构造函数

C#中的类构造函数

如何在 node.js 单元测试中模拟构造函数调用?

我可以从 C# 中另一个类的构造函数调用构造函数吗?

如何在C#中调用通过Structure Map实例化的类的构造函数

没有调用基类构造函数的C#中的继承问题

为什么使用模拟类中另一个函数调用的函数的测试失败?

C#-在派生类中调用基类和类构造函数

不知道扩展类的扩展类的c ++调用构造函数存储在基类变量中

稍后在 C++ 中的另一个类方法中调用类构造函数

C ++抽象类构造函数调用

C ++为类调用构造函数

如何使用phpunit单元测试在已测试类的构造函数中调用的方法

如何在C ++中从基类构造函数调用派生类方法?

在同一个类C#中使用in构造函数调用Constructor,并在相同的构造函数中调用基本Constructor

如何在访问C#中的成员函数时防止调用一个类的构造函数?

从C#中的类调用函数

C#使用当前类的参数和无参数构造函数调用基本构造函数

复制构造函数中的C ++调用函数

如何在基类中调用“移动”“ &&”构造函数?在C ++中

使用模拟测试构造函数

构造函数c#中的虚拟成员调用

C#中的显式构造函数调用

在构造函数中的C#调用事件

如何在C ++类中存储Embind'val'-错误:调用已删除的构造函数