.Net项目中如果要对Controller或者服务进行测试一般要用mock创建需要注入的实例, 要配置好这些实例还挺复杂的
在Furion帮我们实现了单元测试的构造函数注入, 让单元测试变得简单, 具体步骤如下
在解决方面里面新增一个xunit的测试项目TestProject1, 测试项目一般单独放在test目录里面
NuGet安装Furion.Pure和Furion.Pure.Xunit ; 版本要和项目统一
把解决方案里面的项目全部引入
添加一个启动类, 初始化Furion
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){// 初始化 FurionServe.RunNative(services =>{// 注册远程服务services.AddRemoteRequest(); });}
}
测试服务
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);}
}