Сделайте интеграционный тест dbContext - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь выполнить интеграционный тест, чтобы проверить, правильно ли работает мой ApplicationDbContext. Он находится на MVC core asp. net 3.1 приложении, использующем Entity Framework и Pomelo.EntityFramework. MySql.

На данный момент я только что создал приложение MVC с ApplicationDbContext ; Сущность; и я настроил базу данных в startup.cs. В то время я протестировал миграцию и обновление базы данных, и она работает.

После этого я добавил в свое решение 2 проекта для модульного теста и интеграционного теста, а затем добавил ссылку на проект. Я сделал простой тест для использования ApplicationDbContext, но он не работает, и у меня возникают проблемы с решением этой проблемы.

Если у кого-то есть идея о том, как создать этот вид теста с использованием xunit.

Код моего проекта здесь: https://github.com/BeRoots/aspnetcore3.1-MVC-EF-MySQL

Тест интеграции, который я пытался сделать, ЗДЕСЬ

1 Ответ

1 голос
/ 14 февраля 2020

Во-первых, вам нужно будет добавить пакет Pomelo.EntityFrameworkCore.MySql NuGet в ваши 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>
...