集成测试仅适用于线程



我们目前有一个集成测试,该测试测试了前端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
        ...
    }

最新更新