C# 设置模拟类方法以执行Func<;任务>;使用最小起订量的参数
我正在编写单元测试,它涉及一个服务方法,该方法接受C# 设置模拟类方法以执行Func<;任务>;使用最小起订量的参数,c#,.net,unit-testing,moq,xunit,C#,.net,Unit Testing,Moq,Xunit,我正在编写单元测试,它涉及一个服务方法,该方法接受Func参数,并在某些条件下执行它 方法如下所示: public class ServiceA : IServiceA { public async Task TryExecute(Func<Task> func, string foo) { // ... do unimportant things relating to string foo await func(); } } [Fac
Func
参数,并在某些条件下执行它
方法如下所示:
public class ServiceA : IServiceA
{
public async Task TryExecute(Func<Task> func, string foo)
{
// ... do unimportant things relating to string foo
await func();
}
}
[Fact]
public async void TestName()
{
// Arrange
var serviceA = new Mock<IServiceA>();
serviceA.Setup(a => a.TryExecute(It.IsAny<Func<Task>>(), It.IsAny<string>()))
.Returns(async (Func<Task> func, string foo) => { await func(); });
var serviceB = new ServiceB(serviceA.Object);
var bar = new Bar();
// Act
await serviceB.MethodThatCallsTryExecute(bar);
// Assert
... failing assertions
}
一个失败的单元测试示例,包括在调用TryExecute
时尝试设置模拟结果,如下所示:
public class ServiceA : IServiceA
{
public async Task TryExecute(Func<Task> func, string foo)
{
// ... do unimportant things relating to string foo
await func();
}
}
[Fact]
public async void TestName()
{
// Arrange
var serviceA = new Mock<IServiceA>();
serviceA.Setup(a => a.TryExecute(It.IsAny<Func<Task>>(), It.IsAny<string>()))
.Returns(async (Func<Task> func, string foo) => { await func(); });
var serviceB = new ServiceB(serviceA.Object);
var bar = new Bar();
// Act
await serviceB.MethodThatCallsTryExecute(bar);
// Assert
... failing assertions
}
[事实]
公共异步void TestName()
{
//安排
var serviceA=new Mock();
serviceA.Setup(a=>a.TryExecute(It.IsAny(),It.IsAny())
.Returns(异步(Func-Func,字符串foo)=>{await Func();});
var serviceB=新serviceB(serviceA.Object);
var bar=新的bar();
//表演
等待调用stryExecute的服务b.方法(bar);
//断言
…失败的断言
}
问题:在测试执行期间,传递到TryExecute
的privateFunction
没有被执行(即调试时,我无法进入传递的privateFunction
方法)
请让我知道,如果有什么我可以详细说明;这是我关于StackOverflow的第一个问题。尝试更改调用stryExecute(Bar)的
方法的签名,以返回a而不是void
(如果是),其余代码应按预期工作,只需检查调用了private function
公共接口IServiceB
{
调用stryExecute的任务方法(Bar);
}
公共类服务B:IServiceB
{
私有只读服务器a_serviceA;
公共服务B(IServiceA服务A)
{
_服务a=服务a;
}
调用stryExecute(Bar)的公共异步任务方法
{
//…做与酒吧有关的不重要的事情
Func privateFunction=()=>Task.CompletedTask;
等待服务a.尝试执行(私有功能,“baz”);
}
}
例如,应更新测试方法(或调用调用调用StryExecute的方法的任何其他方法)的签名,以返回任务
[事实]
公共异步任务TestName()
{
}