Furion项目的单元测试

devtools/2024/12/23 4:11:22/

.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);}
}

http://www.ppmy.cn/devtools/25481.html

相关文章

Qt :浅谈在大型项目中使用信号管理器

一、引言 在大型的Qt项目中,我们往往涉及到很多不同类型的对象之间通信交互,这时候,仍旧采用小项目使用的哪里使用,哪里关联的方法,在复杂的场景下将是无穷无尽的折磨。 下面我们给出一种苦难的场景。 class A: public QObject {Q_OBJECT public:A(QObject *parent = nu…

对于button按钮引发的bug

主要原因就是今天在给button按钮添加一个点击事件的时候&#xff0c;并没有声明button的type类型&#xff0c;就一直发生点击按钮但事件并不触发的问题。 触发这种问题的原因就是: 按钮默认的 type 类型是 "submit"&#xff0c;而不是 "button"。当你不显式…

中应该如何让c++工程认识.c工程编译出来的库文件?

from gpt 但是 测试此方法没问题 在 .h 文件中声明 C 函数的原型是让 C 工程认识 C 工程编译出来的库文件的关键。下面是一种常见的做法&#xff1a; 在 .h 文件中声明函数原型&#xff1a; 创建一个 .h 文件&#xff0c;其中包含要在 C 代码中调用的 C 函数的声明。这些声明…

day04--react中state的简化

一、简化state 回顾我们之前的写法&#xff1a; state是在构造器里面定义的。 1&#xff09;我们为什么要在构造器里面定义&#xff1f; 答&#xff1a;对于创建一个实例对象时&#xff0c;我们对要传进来的数据进行接收&#xff0c;那么我们必须要写一个构造器来接收传进来的…

Git零基础

Git工作流程图 操作指令 分支 、 指令总结 远程仓库

瑞米派实时系统与EtherCAT移植-米尔Remi Pi

1.概述 Remi Pi采用瑞萨RZ/G2L作为核心处理器&#xff0c;该处理器搭载双核Cortex-A551.2GHzCortex-M33200MHz处理器&#xff0c;其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元&#xff08;支持H.264硬件编解码&#xff09;,16位的DDR4-1600 / DDR3L-1333内存…

让新手变中手的ChatGPT 使用方法

让新手变中手的ChatGPT 使用方法 已经要一年了,没想到这篇还是一样有用。看到许多依然是一句话就要问出结果的教学,就知道AI 进步很快,但人的学习速度还需要更多时间。 以下为去年原版内容加上新的两招更新,希望帮助你使用ChatGPT 更好用,当未来文字可直接生成影像时,你…

OceanBase开发者大会实录-杨传辉:携手开发者打造一体化数据库

本文来自2024 OceanBase开发者大会&#xff0c;OceanBase CTO 杨传辉的演讲实录—《携手开发者打造一体化数据库》。完整视频回看&#xff0c;请点击这里&#xff1e;> 各位 OceanBase 的开发者&#xff0c;大家上午好&#xff01;今天非常高兴能够在上海与大家再次相聚&…