Как вы видите ошибки от контроллера в xunit - PullRequest
0 голосов
/ 18 апреля 2019

Я использовал это для настройки моих интеграционных тестов xunit.

Редактировать: я разместил неправильную ссылку.Вот правильный.

https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.2

Я звоню с ошибкой

var request = new HttpRequestMessage(new HttpMethod("GET"),
    "/api/Lookup/ProvinceState/GetAllProvinceStates");
var response = await _client.SendAsync(request);

Assert.Equal(HttpStatusCode.OK, response.StatusCode);

Код состояния 500 иДанные ответа - это HTML-страница с ошибкой.Я надеялся, что смогу получить вывод прямо в моем тестовом окне.

Я добавил .Configure(x => { }); к своему CustomWebApplicaitonFactory, что помешало запуску вызвать app.UseDeveloperExceptionPage();.Тогда это начало выдавать текст.Поэтому я просто записал этот текст на консоль во время теста, но я не хочу продолжать делать это для каждого теста.

Должно быть каноническое решение.Чего мне не хватает?

1 Ответ

0 голосов
/ 19 апреля 2019

Хорошо. Догадаться. По сути, вам вообще не нужен обработчик исключений. Вы просто хотите, чтобы он продолжал выпадать, пока не попадет в библиотеки xunit.

На самом деле оказывается, что это важнее, чем я когда-то думал. Если вы не сделаете это правильно, вы не получите правильные ошибки от Continuous Integration.

При первой настройке приложения MVC вам был предоставлен этот маленький кусочек кода

public void Configure(IApplicationBuilder app, IHostingEnvironment env)        {
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage(); //This is the problem
    }

но вы все еще хотите, чтобы эта строка выполнялась во время обычной разработки. Это помогает иметь довольно html-ошибку со всеми достоинствами JavaScript и CSS.

Так что вы должны переопределить это во время XUNIT. Начните со ссылки от Microsoft, которую я разместил в вопросе.

Это шаблон с

protected override void ConfigureWebHost(IWebHostBuilder builder)
{
    builder.ConfigureServices(services =>
    //...

но у строителя тоже есть .Configure(app => {});

Но вам все еще нужен MVC для запуска app.UseMvc внутри оверрайдера Config. Вам также понадобится переопределитель AddMvc к ConfigureServices. Фактически, вы можете вернуться к разработке / производству Startup.cs и скопировать все строки из функции Configure. По крайней мере, вы должны иметь:

public class CustomWebApplicationFactory<TStartup> 
    : WebApplicationFactory<TStartup> where TStartup: class
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        builder.ConfigureServices(services => { services.AddMvc(); }).Configure(app => { app.UseMvc(); });
    }
}

Это помешает запуску ваших методов запуска. Бьюсь об заклад, большинство людей просто сдался по этому вопросу. Я действительно хочу, чтобы Microsoft опубликовала это.

Редактировать: Посмотрите, как это круто!

Вот оно в действии. Посмотрите на эти гиперссылки. Теперь я могу просто щелкнуть ссылку, и она перейдет прямо в это место в коде. Я на самом деле исправил эту ошибку и вернулся, чтобы исправить ее, чтобы показать всем.

Error example

...