【问题标题】:Make an integration test of the dbContext对 dbContext 进行集成测试
【发布时间】:2020-01-23 23:03:08
【问题描述】:

我正在尝试进行集成测试以测试我的 ApplicationDbContext 是否正常工作。它位于使用实体框架和 Pomelo.EntityFramework.MySql 的 MVC 核心 asp.net 3.1 应用程序上。

目前,我刚刚使用 ApplicationDbContext 创建了 MVC 应用程序;一个实体;我在startup.cs中配置了数据库。当时,我测试了迁移和更新数据库,它可以工作。

之后,我在我的解决方案中为单元测试和集成测试添加了 2 个项目,然后在它们上添加了项目引用。我做了一个简单的测试来使用 ApplicationDbContext 但它不起作用,我在解决这个问题时遇到了麻烦。

如果有人知道如何使用 xunit 创建这种测试。

我的项目代码在这里:https://github.com/BeRoots/aspnetcore3.1-MVC-EF-MySQL

我尝试做的集成测试是HERE

【问题讨论】:

    标签: entity-framework asp.net-core-mvc xunit asp.net-core-3.1 pomelo-entityframeworkcore-mysql


    【解决方案1】:

    首先,您需要将Pomelo.EntityFrameworkCore.MySql NuGet 包添加到您的weblab2XUnitIntegrationTestWeblab2 项目中。

    那么你需要从你的XUnitIntegrationTestWeblab2项目中引用你的weblab2项目。

    您的项目现在可以编译,但您的测试仍然会失败。

    最后,您需要在使用之前设置您的ApplicationDbContext 实例。 我以Application_DbContext_Should_Connect_To_MySql_Database 测试的一个非常简单的示例的形式做到了这一点:

    [Fact]
    public void Application_DbContext_Should_Connect_To_MySql_Database()
    {
        // Arrange
        var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>()
            .UseMySql("server=127.0.0.1;port=3306;user=root;password=;database=so59888273", builder => builder
                .ServerVersion(new Version(8, 0, 18), ServerType.MySql));
    
        ApplicationDbContext dbContext = new ApplicationDbContext(optionsBuilder.Options);
        bool expected = true;
    
        // Act
        bool result = dbContext.Database.CanConnect();
    
        // Assert
        Assert.Equal(expected, result);
    }
    
    

    这是一个包含所有更改的补丁:

    diff --git a/XUnitIntegrationTestWeblab2/UnitTest2.Pomelo.EntityFramework.Core.MySql.ApplicationDbContextTest.cs b/XUnitIntegrationTestWeblab2/UnitTest2.Pomelo.EntityFramework.Core.MySql.ApplicationDbContextTest.cs
    index 2c60ea3..0b058a5 100644
    --- a/XUnitIntegrationTestWeblab2/UnitTest2.Pomelo.EntityFramework.Core.MySql.ApplicationDbContextTest.cs
    +++ b/XUnitIntegrationTestWeblab2/UnitTest2.Pomelo.EntityFramework.Core.MySql.ApplicationDbContextTest.cs
    @@ -1,4 +1,6 @@
     using System;
    +using Microsoft.EntityFrameworkCore;
    +using Pomelo.EntityFrameworkCore.MySql.Infrastructure;
     using weblab2.Data;
     using Xunit;
    
    @@ -6,18 +8,24 @@ namespace XUnitIntegrationTestWeblab2
     {
         public class UnitTest2_Pomelo_EntityFramework_Core_MySql_ApplicationDbContextTest
         {
    -        [Fact]
    -        public void Application_DbContext_Should_Connect_To_MySql_Database()
    -        {
    -            // Arrange
    -            ApplicationDbContext DbContext = new ApplicationDbContext();
    -            bool expected = true;
    -            // Act
    -            bool result = DbContext.Database.CanConnect();
    +[Fact]
    +public void Application_DbContext_Should_Connect_To_MySql_Database()
    +{
    +    // Arrange
    +    var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>()
    +        .UseMySql("server=127.0.0.1;port=3306;user=root;password=;database=so59888273", builder => builder
    +            .ServerVersion(new Version(8, 0, 18), ServerType.MySql));
    
    -            // Assert
    -            Assert.Equal(expected, result);
    -        }
    +    ApplicationDbContext dbContext = new ApplicationDbContext(optionsBuilder.Options);
    +    bool expected = true;
    +    
    +    // Act
    +    bool result = dbContext.Database.CanConnect();
    +
    +    // Assert
    +    Assert.Equal(expected, result);
    +}
    +        
             [Fact]
             public async void Application_DbContext_Should_Connect_To_MySql_Database_Async()
             {
    diff --git a/XUnitIntegrationTestWeblab2/XUnitIntegrationTestWeblab2.csproj b/XUnitIntegrationTestWeblab2/XUnitIntegrationTestWeblab2.csproj
    index a2352e4..665815c 100644
    --- a/XUnitIntegrationTestWeblab2/XUnitIntegrationTestWeblab2.csproj
    +++ b/XUnitIntegrationTestWeblab2/XUnitIntegrationTestWeblab2.csproj
    @@ -8,9 +8,14 @@
    
       <ItemGroup>
         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
    +    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.1" />
         <PackageReference Include="xunit" Version="2.4.0" />
         <PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
         <PackageReference Include="coverlet.collector" Version="1.0.1" />
       </ItemGroup>
    
    +  <ItemGroup>
    +    <ProjectReference Include="..\weblab2\weblab2.csproj" />
    +  </ItemGroup>
    +
     </Project>
    diff --git a/weblab2/weblab2.csproj b/weblab2/weblab2.csproj
    index 0fcc948..6a736ad 100644
    --- a/weblab2/weblab2.csproj
    +++ b/weblab2/weblab2.csproj
    @@ -4,6 +4,10 @@
         <TargetFramework>netcoreapp3.1</TargetFramework>
       </PropertyGroup>
    
    +  <ItemGroup>
    +    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.1" />
    +  </ItemGroup>
    +
    
    
     </Project>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多