【发布时间】:2021-08-25 13:36:13
【问题描述】:
我正在使用 c#、Nunit 和 Moq,并且我想测试像 Remove() 方法这样的方法,它使用 Action 参数调用另一个方法。
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);
}
}
我想做这样的事情:
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());
}
}
但它不起作用。单元测试没有到达_messageWrapper.SendData();
感谢您的帮助
【问题讨论】:
标签: c# .net unit-testing nunit moq