参数作用试验方法<;T>;加上Nunit和Moq c#
我正在使用c#、Nunit和Moq,我想测试一个方法,比如Remove()方法,它调用另一个带有动作参数的方法参数作用试验方法<;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) {
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了