我们目前有一个集成测试,该测试测试了前端API调用。呼叫是异步的,因此我们强制它直到呼叫准备将结果与我们期望的结果进行比较。
但是,问题是该代码还包含另一个不在等待的异步调用。因此,我们已经嵌套了异步调用。这也具有测试有时成功的原因,有时会失败(种族条件)。
目前,我们已经通过在代码中添加了thread.sleep(10000)来解决问题。但是,这不是一个好的解决方案。
代码喜欢这样:
[TestMethod]
public void Integration_Test_Example()
{
// Arrange
...
// Act
var request = CreateRequest(@"testfile.xml");
var task = target.SendMessage(request);
Thread.Sleep(10000); // dirty fix
task.Wait();
// Assert
...
}
有人对我们如何最好地解决这个问题有建议吗?
如果我正确理解SendMessage
返回任务,因此您应该能够在进行测试之前等待它。
[TestMethod]
public async Task Integration_Test_Example()
{
var request = CreateRequest(@"testfile.xml");
var result = await target.SendMessage(request);
}
您可以将测试更改为等待
[TestMethod]
public async Task Integration_Test_Example()
{
// Arrange
...
// Act
var request = CreateRequest(@"testfile.xml");
await target.SendMessage(request);
// Assert
...
}