我正在编写单元测试,其中包含一个使用Func<Task>
参数的服务方法,在某些条件下执行该参数。
该方法的示例代码如下:
public class ServiceA : IServiceA
{
public async Task TryExecute(Func<Task> func, string foo)
{
// ... do unimportant things relating to string foo
await func();
}
}
调用TryExecute方法的服务看起来像这样
public class ServiceB : IServiceB
{
private readonly IServiceA _serviceA;
public ServiceB(IServiceA serviceA)
{
_serviceA = serviceA;
}
public async MethodThatCallsTryExecute(Bar bar)
{
// ... do unimportant things relating to bar
await _serviceA.TryExecute(privateFunction, "baz");
}
}
一个包含尝试设置模拟结果的 TryExecute
调用的失败单元测试示例如下:
[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
的privateFunction
没有被执行(即当调试时,无法进入传入的privateFunction
方法)。
如果还有需要补充的信息,请告诉我;这是我在StackOverflow上的第一个问题。