Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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
C# 设置模拟类方法以执行Func<;任务>;使用最小起订量的参数_C#_.net_Unit Testing_Moq_Xunit - Fatal编程技术网

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()
{
}