在开发asp.net core web api服务时,想要测试某个服务经常要为service编写一个测试的控制器,然后再通过api来访问进行测试,这样需要频繁的重启服务,而且调试起来也不方便,使用单元测试能够很好的解决这一问题。
其实测试框架有多种选择:
NUnit 、 XUnit 、 MSTest
NUnit 是 XUnit 的前生
XUnit 是面向 .NET Core 的.
MSTest 是微软自带的, 但是很少人用
微软官网三个教程都有,因为我们要对asp.net core进行测试,所以选则 XUnit
在csproj中添加依赖,或者在nuget中下载。
<Project Sdk="Microsoft.NET.Sdk.Web">
<ItemGroup>
<PackageReference Include="xunit" Version="2.4.1" />
ItemGroup>
Project>
moq 在 TDD 扮演很重要的角色
参考链接: moq4 Quickstart
Service 通常会有许多依赖, 我们在做单元测试时不能像spring一样直接使用这些依赖, 不然依赖有问题就会被误以为是这个 Service 的问题.
因为asp.net 觉得,我们测试的是这个方法,不需要依赖其他的类,所以当我们依赖于其他的类时,可以使用mock
来构建所需的对象。
在csproj中添加依赖,或者在nuget中下载。
<Project Sdk="Microsoft.NET.Sdk.Web">
<ItemGroup>
<PackageReference Include="Moq" Version="4.18.1" />
ItemGroup>
Project>
public class Test
{
private readonly ITestOutputHelper _testOutputHelper;
public Test(ITestOutputHelper testOutputHelper)
{
_testOutputHelper = testOutputHelper;
}
///
/// 单元测试基础用法
///
[Fact]
public void testBasic()
{
var mockConfiguration = new Mock<IConfiguration>();
mockConfiguration.SetupGet(obj => obj["AppSettings:TransUrl"]).Returns("127.0.0.1");
IConfiguration configuration = mockConfiguration.Object;
_testOutputHelper.WriteLine(configuration["AppSettings:TransUrl"]);
}
}
运行结果: