C# 单元测试时,您如何等待任务?
在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
[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);
}