Как выполнить модульное тестирование startup.cs .Net Core - PullRequest
0 голосов
/ 23 ноября 2018

мой пост является расширением поста Как выполнить модульное тестирование Startup.cs в .NET Core

Я попытался выполнить модульное тестирование класса Startup.ca с помощью этого (тот же код тогдапредыдущий пост):

[TestMethod]
public void ConfigureServices_RegistersDependenciesCorrectly()
{
    //  Arrange

    //  Setting up the stuff required for Configuration.GetConnectionString("DefaultConnection")
    Mock<IConfigurationSection> configurationSectionStub = new Mock<IConfigurationSection>();
    configurationSectionStub.Setup(x => x["DefaultConnection"]).Returns("TestConnectionString");
    Mock<Microsoft.Extensions.Configuration.IConfiguration> configurationStub = new Mock<Microsoft.Extensions.Configuration.IConfiguration>();
    configurationStub.Setup(x => x.GetSection("ConnectionStrings")).Returns(configurationSectionStub.Object);

    IServiceCollection services = new ServiceCollection();
    var target = new Startup(configurationStub.Object);

    //  Act    
    target.ConfigureServices(services);
    //  Mimic internal asp.net core logic.
    services.AddTransient<TestController>();

    //  Assert    
    var serviceProvider = services.BuildServiceProvider();

    var controller = serviceProvider.GetService<TestController>();
    Assert.IsNotNull(controller);
}

Но я получил ошибку в строке target.ConfigureServices (services);когда я запускаю тест.Я получил сообщение об ошибке:

Сообщение: метод тестирования Project.Services.PublicReporting.Tests.StartupTests.ConfigureServices_RegistersDependenciesCorely выдает исключение: System.IO.FileLoadException: не удалось загрузить файл или сборку. Microsoft.Extensions.Caching.Memory, версия = 2.1.2.0, культура = нейтральная, PublicKeyToken = adb9793829ddae60 'или одна из ее зависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040) ---> System.IO.FileLoadException: не удалось загрузить файл или сборку 'Microsoft.Extensions.Caching.Memory, версия = 2.1.1.0, культура = нейтральная, PublicKeyToken = adb9793829ddae60' или одна из еезависимостей.Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.(Исключение из HRESULT: 0x80131040)

Это потому, что мы вызываем ConfigureService и происходит сбой служб .AddResponseCaching ();

Это мой метод службы конфигурации, он завершается как второйлиния.

public void ConfigureServices(IServiceCollection services)
        {
            services.RegisterApplicationComponents();

            services.AddResponseCaching();
}

Я думаю, что проблема в том, что, когда мы высмеиваем класс, я не могу выяснить, какую правильную настройку нам нужно иметь, чтобы метод AddResponseCaching () прошел.Кто-нибудь знает, чего не хватает в configurationSectionStub.Setup или, может быть, нам нужно высмеивать поведение службы?

спасибо!

1 Ответ

0 голосов
/ 23 ноября 2018

Используйте Интеграционные тесты в ASP.NET Core , чтобы убедиться, что инфраструктура Startup работает нормально.И обратите внимание, что вы можете внедрить фиктивные сервисы, переопределив их в тесте, используя ConfigureTestServices на компоновщике хоста.

[Fact]
public async Task Get_QuoteService_ProvidesQuoteInPage()
{
    // Arrange
    var client = _factory.WithWebHostBuilder(builder =>
        {
            builder.ConfigureTestServices(services =>
            {
                services.AddScoped<IQuoteService, TestQuoteService>();
            });
        })
        .CreateClient();

    //Act
    var defaultPage = await client.GetAsync("/");
    var content = await HtmlHelpers.GetDocumentAsync(defaultPage);
    var quoteElement = content.QuerySelector("#quote");

    // Assert
    Assert.Equal("Something's interfering with time, Mr. Scarman, " +
        "and time is my business.", quoteElement.Attributes["value"].Value);
}
...