首页 > 其他分享 >xunit 测试

xunit 测试

时间:2024-10-26 11:47:18浏览次数:3  
标签:xunit var Application 测试 new Tier using UnitTests

xunit测试

dotnet cli 创建测试项目

dotnet new xunit -o tests/N-Tier.Application.UnitTests.Learn
dotnet sln add tests/N-Tier.Application.UnitTests.Learn
dotnet add tests/N-Tier.Application.UnitTests.Learn reference src/N-Tier.Application

测试指定项目

dotnet test tests/N-Tier.Application.UnitTests.Learn

测试

测试类没有任何依赖注入-直接new

测试类: WatherForecastServiceTests.cs

using N_Tier.Application.Services.Impl;

namespace N_Tier.Application.UnitTests.Services;

public class WeatherForecastServiceTests
{
    private readonly WeatherForecastService _sut;

    public WeatherForecastServiceTests()
    {
        _sut = new WeatherForecastService();
    }

    [Fact]
    public async Task GetAsync_Should_Return_List_With_Only_Five_ElementsAsync()
    {
        var result = await _sut.GetAsync();
        Assert.Equal(5, result.Count());
    }
}

被测试类: WeatherForecastService.cs

using N_Tier.Application.Helpers;
using N_Tier.Application.Models.WeatherForecast;

namespace N_Tier.Application.Services.Impl;

public class WeatherForecastService : IWeatherForecastService
{
    private readonly List<string> _summaries;

    public WeatherForecastService()
    {
        _summaries = new List<string>
            { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
    }

    public async Task<IEnumerable<WeatherForecastResponseModel>> GetAsync()
    {
        await Task.Delay(500);

        return Enumerable.Range(1, 5).Select(index => new WeatherForecastResponseModel
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = RandomGenerator.GenerateInteger(-20, 55),
            Summary = _summaries[RandomGenerator.GenerateInteger(0, _summaries.Count)]
        });
    }
}

测试类 : Flent Assertions > WatherForecastServiceTests.cs

using FluentAssertions;
using N_Tier.Application.Services.Impl;
namespace N_Tier.Application.UnitTests.Services;
public class WeatherForecastServiceTests
{
    private readonly WeatherForecastService _sut;
    public WeatherForecastServiceTests()
    {
        _sut = new WeatherForecastService();
    }
    [Fact]
    public async Task GetAsync_Should_Return_List_With_Only_Five_ElementsAsync()
    {
        var result = await _sut.GetAsync();

        // assert 
        // Assert.Equal(5, result.Count());

        // fluent assert 
        result.Should().HaveCount(5);
    }
}

测试类有依赖注入

dotnet add .\tests\N-Tier.Application.UnitTests.Learn\ package FluentAssertions
dotnet run --project ./tests/N-Tier.Application.UnitTests.Learn.Console

N-Tier.Application.UnitTests.Learn.Console > Program.cs

using AutoMapper;
using Microsoft.Extensions.Configuration;
using NSubstitute;
using N_Tier.Application.MappingProfiles;
using N_Tier.Application.Services.Impl;
using N_Tier.DataAccess.Repositories;
using N_Tier.Shared.Services;
using FizzWare.NBuilder;
using N_Tier.Core.Entities;
using System.Linq.Expressions;
using FluentAssertions;

var mapper = new MapperConfiguration(cfg =>
{
    cfg.AddMaps(typeof(TodoItemProfile));
}).CreateMapper();

var configurationBody = new Dictionary<string, string>
{
    { "JwtConfiguration:SecretKey", "Super secret token key" }
};

var configuration = new ConfigurationBuilder().AddInMemoryCollection(configurationBody).Build();

var todoListRepository = Substitute.For<ITodoListRepository>();

var claimService = Substitute.For<IClaimService>();

var sut = new TodoListService(todoListRepository, mapper, claimService);


//  Arrange ------------------------------------------------------------------------------
//  创建一个包含10个实体的 TodoList             
var todoLists = Builder<TodoList>.CreateListOfSize(10).Build().ToList();

//  函数定义:Task<List<TEntity>> GetAllAsync(Expression<Func<TEntity, bool>> predicate);
//                                         模拟入口参数                              模拟返回参数
//                 GetAllAsync(Expression<Func<TEntity, bool>> predicate);     Task<List<TEntity>>
todoListRepository.GetAllAsync(Arg.Any<Expression<Func<TodoList, bool>>>()).Returns(todoLists);


// 函数定义:string GetUserId();
//                               模拟返回参数 
//                                  string 
claimService.GetUserId().Returns("1234567890");

// Act      ------------------------------------------------------------------------------
var result = await sut.GetAllAsync();


//Assert
Console.WriteLine(result.Count());



// dotnet run --project ./tests/N-Tier.Application.UnitTests.Learn.Console

标签:xunit,var,Application,测试,new,Tier,using,UnitTests
From: https://www.cnblogs.com/zhuoss/p/18503869

相关文章

  • 哪款网站压力测试工具值得推荐
    在进行网站压力测试的过程中,以下工具值得推荐:一、ApacheJMeter;二、LoadRunner;三、Locust;四、Gatling;五、WebLoad;六、Neoload;七、Blazemeter。ApacheJMeter是一款开源的性能测试工具,不仅适用于对HTTP和HTTPS的压力测试,也可以对数据库、FTP服务器、邮件服务器等进行压力测试。JMe......
  • 半导体测试行业的相关术语
    ATE=AutomaticTestEquipment.是自动化测试设的缩写,于半导体产业意指集成电路(IC)自动测试机,用于检测集成电路功能之完整性,为集成电路生产制造之最后流程,以确保集成电路生产制造之品质。DUT=DeviceUnderTest.待测设备,半导体行业一般是电子元器件/芯片。PIB=......
  • [超详细有案例]理解白盒测试的5种逻辑覆盖
    [超详细有案例]理解白盒测试的5种逻辑覆盖    白盒测试是穷举路径测试,在逻辑覆盖中有6种,分别是语句覆盖,判定覆盖,条件覆盖,判定/条件覆盖,组合覆盖,路径覆盖,下面我将以每种覆盖的定义,实例讲解,优点,缺点了帮助大家理解。(1)语句覆盖        语句覆盖是最起码的结构覆......
  • 软件开发与测试模型
    软件开发模型软件开发生命周期模型是软件产品从最初构思到退役的过程。常见的软件开发模型大爆炸模型直接开发(有想法直接编程无计划性)。边写边改模型变对需求进行分析边对软件进行编程。先简单的设计来回编程来回测试来回修改直至觉得足够才发布产品。无计划与文档可......
  • 搭建YOLOv8实现裂缝缺陷识别全流程教程:从源码下载到模型测试
    教程目的:yolov8的安装配置到训练模型,并完成使用模型进行识别前提注意:yolov8要求Python需要版本必需大于等于3.10,我用的Python3.12.3,这里分享下Python3.12.3的安装器=>夸克网盘分享以及教程中用到的yolov8源码、权重文件、GPU配套版本的Torch=> 夸克网盘分享大致步骤1.......
  • Robot Framework接口自动化测试案例
    本文我们一起看一个接口自动化测试的案例,带大家了解一下RobotFramework在接口自动化测试中的应用。接口自动化步骤:1、发送请求通过RequestsLibrary类库中的postrequest关键字发起HTTP请求,如下图所示2、解析结果通过解析接口返回的状态码或者其他字段3、验证结果通......
  • bypass waf测试_rce
    前言以下验证绕过效果都使用开源雷池waf知己知彼百战百胜,想bypasswaf还是得先了解wafwaf是什么WAF(WebApplicationFirewall,WEB应用防火墙)会过滤和监测Web应用程序与互联网之间的HTTP/HTTPS流量,以此来保护Web应用程序安全。它通常会保护Web应用程序免受各种形式的攻击,......
  • 软件测试、交互测试有什么区别
    ​​软件测试与交互测试的区别:1.软件测试概念;2.交互测试概念;3.目的和重点;4.测试方法;5.测试内容;6.应用场景;7.测试工具;8.测试人员;9.测试结果的处理。软件测试更注重产品的功能性、性能及稳定性,而交互测试则侧重于用户体验和界面操作的流畅性。1.软件测试概念软件测试是在软件开发......
  • 剪映国际版CapCut的PC下载,稳定4.1.0/测试4.3.0双版本,免费使用素材和滤镜 包含下载链接
    国际版的剪映CapCut可以免费使用所有的素材、滤镜,良心软件,台湾版的官网:CapCut|全功能影片編輯器和AI導向的平面設計工具CapCut剪映国际版是一款全功能的视频编辑软件,该软件提供了各种功能丰富的工具,如剪切、合并和调整视频大小等常用编辑功能,以及多种视觉特效,如过渡效......
  • 第8课—设计测试用例编写技巧
    一、查看用例的模板案例模板1:案例模板2:案例模板3:二、用例的要素讲解.编写用例的要素?用例编号,用例标题,前置条件,测试步骤,预期结果,优先级(必写)系统名称、模块名称、用例创建时间,实际结果,用例类型,执行时间,执行状态等(非必填项)三、详解测试用例要素(一)用例编号可以称为:用例id,测......