Microsoft.AspNet.TestHost.TestServer需要多于一个Core/Processor?
Microsoft.AspNet.TestHost.TestServer requires more than one Core/Processor?
在 article on strathweb 之后,我最近向我的 DNX 项目添加了一些集成测试。在本地这些 运行 很好(对于内存中的网络服务器来说是的)。
然而,当 运行 连接 tests on a VM with only a single core 时,集成测试无限期挂起(最终失败,因为应用程序构建的上限为 60 分钟。
奇怪的是,运行宁 tests on a VM with more than one core 一切 运行 都很好。
显而易见的结论是,也许 Microsoft.AspNet.TestHost.TestServer 需要 不止一个核心(或至少不止一个逻辑处理器)。有没有人有这方面的经验能够 confirm/deny?
@Tracher 作为评论回复:
xUnit 支持异步,所以让你的测试异步和 return task(否则 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(这是导致你的问题):
另外,值得注意的是为什么会这样。 See more about dead-lock and SynchronizationContext
在 article on strathweb 之后,我最近向我的 DNX 项目添加了一些集成测试。在本地这些 运行 很好(对于内存中的网络服务器来说是的)。
然而,当 运行 连接 tests on a VM with only a single core 时,集成测试无限期挂起(最终失败,因为应用程序构建的上限为 60 分钟。
奇怪的是,运行宁 tests on a VM with more than one core 一切 运行 都很好。
显而易见的结论是,也许 Microsoft.AspNet.TestHost.TestServer 需要 不止一个核心(或至少不止一个逻辑处理器)。有没有人有这方面的经验能够 confirm/deny?
@Tracher 作为评论回复: xUnit 支持异步,所以让你的测试异步和 return task(否则 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(这是导致你的问题):
另外,值得注意的是为什么会这样。 See more about dead-lock and SynchronizationContext