如何为在MOQ C#中使用对象实例调用的方法创建模拟?

如何为在MOQ C#中使用对象实例调用的方法创建模拟?,c#,nunit,moq,C#,Nunit,Moq,我为正在使用MOQ&NUnit进行测试的方法创建了测试。要测试的方法将使用另一个使用相应类的对象的方法。当我试图模拟被调用的方法时,我无法调用被模拟的方法。如何模拟这种方法,因为我的测试方法使用的是另一种方法。请帮我做这个 public DataSet ExecuteCondition() { var ObjClass1 = new Class1(); .... var result = ObjClass1.VerifyPrecondition(query); .... }

我为正在使用MOQ&NUnit进行测试的方法创建了测试。要测试的方法将使用另一个使用相应类的对象的方法。当我试图模拟被调用的方法时,我无法调用被模拟的方法。如何模拟这种方法,因为我的测试方法使用的是另一种方法。请帮我做这个

public DataSet ExecuteCondition()
{
  var ObjClass1 = new Class1();
  ....
  var result = ObjClass1.VerifyPrecondition(query);
  ....
}


public class Class1:IClass1
{
 public string VerifyPrecondition(string query)
 {
   ....
   return text;
 }
}

所以,我想这应该是这样的:

使用ExecuteCondition()方法初始化:

测试:

[测试]
公开无效测试()
{
var mockClass1=新Mock();
mockClass1.Setup(x=>x.verifypremission(It.IsAny())。返回(“测试”);
var dataClass=新的数据类(mockClass1.Object);
dataClass.ExecuteCondition();
//断言
}

与实现问题的紧密耦合使单独模拟和测试变得困难。被测试的方法可以被导出到
Class1
。大多数框架无法模拟类初始化,包括Moq。考虑显式依赖原理。谢谢,NKOSI。你能进一步解释一下显式依赖原则吗
public class DataClass
{
    private readonly IClass1 _class1;

    public DataClass(IClass1 class1)
    {
        _class1 = class1;   
    }

    public DataSet ExecuteCondition()
    {
            //....
        var result = _class1.VerifyPrecondition(query);
            //....
    }
}
[Test]
public void Test()
{
    var mockClass1 = new Mock<IClass1>();
    mockClass1.Setup(x => x.VerifyPrecondition(It.IsAny<string>())).Returns("test");
    var dataClass = new DataClass(mockClass1.Object);

    dataClass.ExecuteCondition();

    //Assert
}