在C#/ .NET中模拟没有无参数构造函数的对象

dea*_*mon 31 .net c# reflection constructor mocking

是否可以从不提供无参数构造函数的类创建模拟,并且不将任何参数传递给构造函数?也许是动态创建IL?

背景是我不想仅为测试定义接口.解决方法是为测试提供无参数构造函数.

Tej*_*ejs 48

当然可以.在这个例子中,我将使用Moq,一个非常棒的模拟库.

例:

public class MyObject
{
     public MyObject(object A, object B, object C)
     {
          // Assign your dependencies to whatever
     }
}

Mock<MyObject> mockObject = new Mock<MyObject>();
Mock<MyObject> mockObject = new Mock<MyObject>(null, null, null); // Pass Nulls to specific constructor arguments, or 0 if int, etc
Run Code Online (Sandbox Code Playgroud)

但在许多情况下,我将Mock对象指定为参数,以便我可以测试依赖项:

Mock<Something> x = new Mock<Something>();
MyObject mockObject = new MyObject(x.Object);

x.Setup(d => d.DoSomething()).Returns(new SomethingElse());

etc
Run Code Online (Sandbox Code Playgroud)

  • 当构造函数需要非null值(带代码契约或异常)时,它是否有效? (2认同)