五、ASP.NET Core单元测试和集成测试实践
5.1单元测试
5.1.1创建单元测试项目
首先,在一个现有或新建的ASP.NET Core项目中,右键单击项目节点,选择“测试”>“创建测试项目”。这将创建一个新的测试项目,其中包含一个测试类和一個测试方法。
5.1.2编写单元测试
在测试项目中,我们可以编写针对控制器、模型和库的单元测试。以下是一个针对控制器方法的单元测试示例:
using System;
using Microsoft.AspNetCore.Mvc;
using Xunit;
namespace WebApplication.Tests
{
public class HomeControllerTests
{
private readonly HomeController _controller;
public HomeControllerTests()
{
_controller = new HomeController();
}
[Fact]
public IActionResult TestIndex()
{
// Arrange
var request = new HttpRequestMessage(HttpMethod.Get, "/Home/Index");
// Act
var response = _controller.Index(request);
// Assert
Assert.NotNull(response);
Assert.IsType<ViewResult>(response);
return response;
}
}
}
5.2集成测试
5.2.1创建集成测试项目
与单元测试项目类似,右键单击现有或新建的ASP.NET Core项目,选择“测试”>“创建测试项目”,然后选择“集成测试项目”。这将创建一个新的集成测试项目,其中包含一个测试类和一个测试方法。
5.2.2编写集成测试
在集成测试项目中,我们可以针对不同层级的组件进行测试,例如数据库、服务、控制器等。以下是一个针对数据库层级的集成测试示例:
using System;
using Xunit;
using Microsoft.AspNetCore.Data;
using WebApplication.Data;
namespace WebApplication.Tests
{
public class ApplicationDbContextTests
{
private readonly ApplicationDbContext _context;
public ApplicationDbContextTests()
{
var connectionString = "UseSqlServer";
var options = new DbContextOptionsBuilder<ApplicationDbContext>().UseSqlServer(connectionString);
_context = new ApplicationDbContext(options);
}
[Fact]
public void TestSaveChanges()
{
// Arrange
var entity = new Model.User { Name = "Test User", Age =30 };
// Act
_context.Add(entity);
_context.SaveChanges();
// Assert
Assert.NotNull(_context.Users.FirstOrDefault(u => u.Name == "Test User"));
}
}
}
5.3测试运行
在编写完单元测试和集成测试后,右键单击测试项目,选择“测试”>“运行测试”。这将运行所有测试,并显示测试结果。若要查看单个测试的结果,可以双击测试方法或在其上右键单击并选择“查看测试”。
5.4持续集成与部署
为了实现持续集成与部署,我们可以使用诸如Azure Pipelines、Jenkins或其他类似工具。这些工具可以自动构建、测试和部署ASP.NET Core应用程序。以下是一个简单的Azure Pipelines示例:
```yaml
pool:
name: Default
variables:
dotnetCoreVersion: '3.1'
steps:
- task: NuGetToolInstaller
displayName: 'Install NuGet Package Manager'
version: '5.3' - task: DotNetCoreBuild
displayName: 'Build dotnet core project'
projectPath: 'src/WebApplication/WebApplication.csproj'
dotnetCoreVersion: $[variables.dotnetCoreVersion] - task: DotNetCoreTest
displayName: 'Run unit and integration tests'
projectPath: 'src/WebApplication/Tests/WebApplication.Tests.csproj'
dotnetCoreVersion: $[variables.dotnetCoreVersion]
测试运行器: 'xunit' - task: AzureCLI
displayName: 'Deploy to Azure App Service'
script