В ответ на другие SO вопросы , я столкнулся с проблемой при запуске асинхронной задачи с Xunit и Visual Studio 2015 ctp6.
вот код:
using System;
using System.Threading.Tasks;
using Microsoft.AspNet.TestHost;
using Microsoft.Framework.DependencyInjection;
using Xunit;
using Microsoft.AspNet.Builder;
using System.Net.Http;
namespace Multi.Web.Api
{
public class TestServerHelper : IDisposable
{
public TestServerHelper()
{
ClientProvider = new TestClientProvider();
ApiServer = TestServer.Create((app) =>
{
app.UseServices(services =>
{
services.AddTransient<IClientProvider>(s => ClientProvider);
});
app.UseMulti();
});
}
public TestClientProvider ClientProvider { get; private set; }
public TestServer ApiServer { get; private set; }
public void Dispose()
{
ApiServer.Dispose();
ClientProvider.Dispose();
}
}
public class MultiMiddlewareTest : IClassFixture<TestServerHelper>
{
TestServerHelper _testServerHelper;
public MultiMiddlewareTest(TestServerHelper testServerHelper)
{
_testServerHelper = testServerHelper;
}
[Fact]
public async Task ShouldReturnToday()
{
using (HttpClient client = _testServerHelper.ApiServer.CreateClient())
{
var response = await client.GetAsync("http://localhost/today");
String content = await response.Content.ReadAsStringAsync();
Assert.Equal(content, "2015-04-15 count is 1");
}
}
[Fact]
public async Task ShouldReturnYesterday()
{
using (HttpClient client = _testServerHelper.ApiServer.CreateClient())
{
var response = await client.GetAsync("http://localhost/yesterday");
String content = await response.Content.ReadAsStringAsync();
Assert.Equal(content, "2015-04-14 count is 1");
}
}
}
}
в визуальной студии TestExplorer при запуске теста по одному (щелкните правой кнопкой мыши и выберите отладить выбранный тест) все в порядке, но при запуске всех ни один из проходов, и у меня есть следующая ошибка
Message : Response status code does not indicate success : 404 (Not Fount)
весь код доступен по другому вопросу, поэтому в этом вопросе я ответил, как использовать несколько экземпляров TestServer для имитации внешнего API. И я думаю, что это связано с некоторым контекстом синхронизации.
Я думаю, что написал свой помощник не лучшим образом, потому что я вижу, что он удаляет объекты до фактического выполнения вызова (иногда нет...). у кого-то была такая же проблема и было решение по этому поводу?
ОБНОВЛЕНИЕ: ссылка на полный код на github