集成测试仅适用于Thread.Sleep

时间:2017-12-13 12:33:53

标签: c# integration-testing race-condition

我们目前有一个测试前端api调用的集成测试。该调用是异步的,因此我们强制它,直到调用准备好将结果与我们期望的结果进行比较。

然而,问题是该代码还包含另一个不等待的异步调用。所以我们有嵌套的异步调用。这也导致测试有时成功,有时失败(竞争条件)。

现在我们已经通过在代码中添加了Thread.Sleep(10000)来解决了这个问题。但是,这不是一个好的解决方案。

代码喜欢这样:

shinyjs::hide('compare_1')

有没有人就如何最好地解决这个问题提出建议?

2 个答案:

答案 0 :(得分:1)

如果我理解正确SendMessage返回任务,那么在继续测试之前,您应该能够等待它。

[TestMethod]
public async Task Integration_Test_Example()
{
    var request = CreateRequest(@"testfile.xml");
    var result = await target.SendMessage(request);
}

答案 1 :(得分:0)

您可以将测试更改为等待

    [TestMethod]
    public async Task Integration_Test_Example()
    {
        // Arrange
        ...

        // Act
        var request = CreateRequest(@"testfile.xml");
        await target.SendMessage(request);

        // Assert
        ...
    }