.Net项目中如果要对Controller或者服务进行测试一般要用mock创建需要注入的实例, 要配置好这些实例还挺复杂的
在Furion帮我们实现了单元测试的构造函数注入, 让单元测试变得简单, 具体步骤如下
在解决方面里面新增一个xunit的测试项目TestProject1, 测试项目一般单独放在test目录里面
NuGet安装Furion.Pure和Furion.Pure.Xunit ; 版本要和项目统一
把解决方案里面的项目全部引入
添加一个启动类, 初始化Furion
CSharp
using Furion.Xunit;
using Microsoft.Extensions.DependencyInjection;
using Xunit.Abstractions;
using Xunit.Sdk;
// 配置启动类类型,第一个参数是 TestProgram 类完整限定名,第二个参数是当前项目程序集名称
[assembly: TestFramework("TestProject1.TestProgram", "TestProject1")]
namespace TestProject1;
/// <summary>
/// 单元测试启动类
/// </summary>
public class TestProgram : TestStartup
{
public TestProgram(IMessageSink messageSink) : base(messageSink)
{
// 初始化 Furion
Serve.RunNative(services =>
{
// 注册远程服务
services.AddRemoteRequest();
});
}
}
测试服务
C#
using Admin.NET.Application.Service;
using Admin.NET.Core;
using Admin.NET.Core.Aio;
using Furion.RemoteRequest.Extensions;
using Xunit.Abstractions;
namespace TestProject1;
public class UnitTest1
{
/// <summary>
/// 输出日志
/// </summary>
private readonly ITestOutputHelper Output;
private readonly XxxxxService _xxxxxService;//需测试的服务
//基于furion框架实现构造函数注入
public UnitTest1(ITestOutputHelper tempOutput, SqlSugarRepository<Entity1> rep, SqlSugarRepository<Entity2> req2)
{
Output = tempOutput;
//构造服务实例
_xxxxxService= new XxxxxService (rep, req2);
}
[Fact]
public async Task Test1()
{
var obj = await _xxxxxService.Get(new Admin.NET.Core.BaseIdInput() { Id = 0 });
Assert.Equal(2, 1 + 1);
}
[Fact]
public async Task 测试请求百度()
{
var rep = await "https://www.baidu.com".GetAsync();
Assert.True(rep.IsSuccessStatusCode);
}
}