0

我正在尝试进行集成测试以测试我的 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

我尝试做的集成测试在这里

4

1 回答 1

2

首先,您需要将Pomelo.EntityFrameworkCore.MySqlNuGet 包添加到您的weblab2项目XUnitIntegrationTestWeblab2中。

然后你需要weblab2从你的项目中引用你的XUnitIntegrationTestWeblab2项目。

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

最后,您需要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>
于 2020-02-14T15:42:25.770 回答