1

关注 Strathweb 上的一篇文章,我最近在我的 DNX 项目中添加了一些集成测试。这些在本地运行良好(对于内存网络服务器来说是的)。

但是,当在只有一个 core 的 VM 上运行测试时,集成测试会无限期挂起(并最终失败,因为 appveyor 构建的上限为 60 分钟。

奇怪的是,当在具有多个内核的 VM 上运行测试时,一切都运行良好。

显而易见的结论是,Microsoft.AspNet.TestHost.TestServer 可能需要多个核心(或至少多个逻辑处理器)。有没有人有这方面的经验可以确认/拒绝?

4

1 回答 1

2

正如@Tratcher 作为评论回复的那样:xUnit 支持异步,所以让你的测试异步并返回任务(否则 xUnit 不知道你的测试结果,它甚至会在它完成运行之前通过):

 [Fact]
        public async Task Get_hello_should_ignore_bob()
        {
            // Given a sample client
            var client = SampleClient();

            // When I call POST /account/signin
            var value = new StringContent("");
            var response = await client.PostAsync("/account/signin", value);

            // Then the result should be Hello
            string result = await response.Content.ReadAsStringAsync();
            result.Should().Be("\"Hello\"");
        }

现在您的测试是async,您可以使用await,而不是在任务上调用 .Result (这是导致您的问题的原因):

此外,值得注意的是为什么会发生这种情况。查看更多关于死锁和 SynchronizationContext

于 2016-03-30T18:39:35.620 回答