对 dbContext 进行集成测试
Make an integration test of the dbContext
我正在尝试进行集成测试以测试我的 ApplicationDbContext 是否正常工作。它位于使用 entity framework 和 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
首先,您需要将 Pomelo.EntityFrameworkCore.MySql
NuGet 包添加到您的 weblab2
和 XUnitIntegrationTestWeblab2
项目中。
然后您需要从您的 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>
我正在尝试进行集成测试以测试我的 ApplicationDbContext 是否正常工作。它位于使用 entity framework 和 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
首先,您需要将 Pomelo.EntityFrameworkCore.MySql
NuGet 包添加到您的 weblab2
和 XUnitIntegrationTestWeblab2
项目中。
然后您需要从您的 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>