Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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# 单元测试时,您如何等待任务?_C# - Fatal编程技术网

C# 单元测试时,您如何等待任务?

C# 单元测试时,您如何等待任务?,c#,C#,在C测试项目中,我进行了以下测试: [TestMethod] public void TestIfListFilled() { // arrange byte stuffTypeID = 0; List<Stuff> locationList = null; // act locationList = GetStuffListAsync(stuffTypeID); // assert Assert.IsTrue(locati

在C测试项目中,我进行了以下测试:

[TestMethod]
public void TestIfListFilled()
{
    // arrange
    byte stuffTypeID = 0;
    List<Stuff> locationList = null;

    // act
    locationList = GetStuffListAsync(stuffTypeID);

    // assert
    Assert.IsTrue(locationList.Count > 0);
}

现在,我的第一个猜测是在我的测试方法中添加方法调用之前的等待。但是,我不能将async添加到testmethod的签名中,否则VisualStudio将开始抱怨。在执行断言之前,我可以做些什么来填充列表?

您也可以使单元测试异步:

请注意,使用Result很容易导致死锁,具体取决于测试运行程序设置的同步上下文;您可能会以异步方法的继续等待返回到等待异步方法完成的线程而告终

请注意将返回类型更改为Task—单元测试运行程序可能会使用此选项以比其他选项更干净的方式检测完成情况,如果您尝试在不支持异步测试的测试运行程序中运行测试,确保测试将中断也很有用


如果您想要更多地控制底层异步操作的工作方式,可以安装自己的同步上下文,并创建由依赖项伪造返回的任务,这些任务只有在您采取适当的步骤后才能完成。它变得非常复杂,但它是可行的-我在某处有一些示例代码,但并不方便…

您也可以使单元测试异步:

请注意,使用Result很容易导致死锁,具体取决于测试运行程序设置的同步上下文;您可能会以异步方法的继续等待返回到等待异步方法完成的线程而告终

请注意将返回类型更改为Task—单元测试运行程序可能会使用此选项以比其他选项更干净的方式检测完成情况,如果您尝试在不支持异步测试的测试运行程序中运行测试,确保测试将中断也很有用

如果您想要更多地控制底层异步操作的工作方式,可以安装自己的同步上下文,并创建由依赖项伪造返回的任务,这些任务只有在您采取适当的步骤后才能完成。它变得非常复杂,但它是可行的-我在某处有一些示例代码,但不方便

Task<List<Stuff>> GetStuffListAsync(Byte stuffTypeID)
[TestMethod]
public async Task TestIfListFilled()
{
    // arrange
    byte stuffTypeID = 0;

    // act
    List<Stuff> locationList = await GetStuffListAsync(stuffTypeID );

    // assert
    Assert.IsTrue(locationList.Count > 0);
}