Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参数作用试验方法<;T>;加上Nunit和Moq c#_C#_.net_Unit Testing_Nunit_Moq - Fatal编程技术网

参数作用试验方法<;T>;加上Nunit和Moq c#

参数作用试验方法<;T>;加上Nunit和Moq c#,c#,.net,unit-testing,nunit,moq,C#,.net,Unit Testing,Nunit,Moq,我正在使用c#、Nunit和Moq,我想测试一个方法,比如Remove()方法,它调用另一个带有动作参数的方法 public class Db { private readonly IMessageWrapper _messageWrapper; private readonly IProvider _provider; public Db(IMessageWrapper messageWrapper, IProvider provider) {

我正在使用c#、Nunit和Moq,我想测试一个方法,比如Remove()方法,它调用另一个带有动作参数的方法

public class Db
{
    private readonly IMessageWrapper _messageWrapper;
    private readonly IProvider _provider;

    public Db(IMessageWrapper messageWrapper, IProvider provider)
    {
        _messageWrapper = messageWrapper;
        _provider = provider;
    }

    public void Remove()
    {
      Execute(transaction => 
      {
         // Do something

         // method to verify with unit test
         _messageWrapper.SendData();
      });
    }

    private void Execute(Action<SqlTransaction> action)
    {
       _provider.ExecuteAction(action);
    }
}
公共类数据库
{
私有只读IMessageWrapper\u messageWrapper;
私有只读IProvider\u提供程序;
公共数据库(IMessageWrapper messageWrapper,IProvider提供程序)
{
_messageWrapper=messageWrapper;
_提供者=提供者;
}
公共空间删除()
{
执行(事务=>
{
//做点什么
//使用单元测试进行验证的方法
_messageWrapper.SendData();
});
}
私有无效执行(操作)
{
_提供者。执行(操作);
}
}
我想做一些类似的事情:

public class DbTest
{
    [Test]
    public void Remove_Should_SendData()
    {
        //... create IMessageWrapper mock and IProvider mock...
        var db = new Db(messageWrapperMock.Object, provider.Object);
        
        provider.Setup(p => p.ExecuteAction(It.IsAny<Action<SqlTransaction>>));

        db.Remove();
        
        messageWrapperMock.Verify(m => m.SendData(), Times.Once());
    }
}
公共类DbTest
{
[测试]
public void Remove_Should_SendData()
{
//…创建IMessageWrapper模拟和IProvider模拟。。。
var db=new db(messageWrapperMock.Object,provider.Object);
provider.Setup(p=>p.ExecuteAction(It.IsAny));
db.Remove();
messageWrapperMock.Verify(m=>m.SendData(),Times.Once());
}
}
但它不起作用。单元测试未到达_messageWrapper.SendData()


感谢您在没有任何代码的情况下进行
设置时提供的帮助

——该方法不起任何作用,但您需要它来调用您的操作。 试试这个:

provider.Setup(p=>p.ExecuteAction(It.IsAny()))
.Callback(c=>c(null));

当您在没有任何代码的情况下设置时,该方法不起任何作用,但您需要它来调用您的操作。 试试这个:

provider.Setup(p=>p.ExecuteAction(It.IsAny()))
.Callback(c=>c(null));

@juharr这是一个采用
SqlTransaction
参数的操作。你把它错当成Func@juharr它是一个采用
SqlTransaction
参数的操作。你把它错当成Func了