C# NUnit

news/2025/10/12 14:40:21/文章来源:https://www.cnblogs.com/Fred1987/p/19136620
Install-Package NUnit;
Install-Package NUnit3TestAdapter;
Install-Package Microsoft.Net.Test.Sdk;
Install-Package Moq;
using Moq;
using NUnit.Framework;
using NUnit.Framework.Legacy;namespace ConsoleApp21
{ [TestFixture]public class CalculatorTests{private Calculator calculator;[SetUp]public void SetUp(){calculator = new Calculator();}[Test]public void Add_TwoNumbers_ReturnsSum(){int a = 5, b = 3;int result=calculator.Add(a, b);Assert.That(result, Is.EqualTo(8));}[Test]public void Subtract_TwoNumbers_ReturnsDifference(){int result = calculator.Subtract(10, 5);Assert.That(result, Is.EqualTo(5));}[Test]public void Divide_ByZero_ThrowDividedByZeroException(){Assert.Throws<DivideByZeroException>(() =>{calculator.Divide(10, 0);});}[TearDown]public void TearDown(){calculator = null;}}public class Calculator{public int Add(int a, int b) => a + b;public int Subtract(int a,int b)=> a - b;public int Divide(int a, int b) => a / b;public int Multiply(int a, int b) => a * b;}[TestFixture]public class AdvancedTests{[Test]public void StringAssert_Example(){string actual = "hello world";StringAssert.Contains("hello", actual);StringAssert.StartsWith("hello", actual);StringAssert.EndsWith("world", actual);}[Test]public void CollectionAssert_Example(){var expected = new List<int> { 1, 2, 3 };var actual = new List<int> { 1, 2, 3 };CollectionAssert.AreEqual(expected, actual);CollectionAssert.AllItemsAreUnique(actual);CollectionAssert.IsSubsetOf(new List<int> { 1, 2 }, actual);}[Test]public void MultipleAssert_Example(){var person = new Person { Name = "Fred", Age = 16 };Assert.Multiple(() =>{Assert.That(person.Name, Is.EqualTo("Fred"));Assert.That(person.Age,Is.GreaterThan(14));Assert.That(person.Age,Is.LessThan(17));});}}public class Person{public string Name { get; set; }public int Age { get; set;  }}[TestFixture]public class ParameterizedTests{[TestCase(1,1,2)][TestCase(2,3,5)][TestCase(-1,-1,-2)][TestCase(0,0,0)]public void Add_VariousNumbers_ReturnsCorrectNum(int a,int b,int expected){var calculator=new Calculator();int result=calculator.Add(a,b); Assert.That(result, Is.EqualTo(expected));}[TestCaseSource(nameof(TestData))]public void Multiply_VariousNumbers_ReturnsCorrectProduct(int a,int b,int expected){var calculator = new Calculator();int result = calculator.Multiply(a, b);Assert.That(result, Is.EqualTo(expected));}private static object[] TestData ={new object[]{2,3,6},new object[]{5,0,0},new object[]{-2,4,-8}};}[TestFixture]public class AsyncTests{[Test]public async Task GetDataAsync_ReturnsExpectedData(){var service = new DataService();var result = await service.GetDataAsync();Assert.That(result, Is.EqualTo("hello world"));}[Test]public async Task CalculateAsync_WithValidInput_ReturnsCorrectValue(){var service = new DataService();int result = await service.CalculateSumAsync(5, 3);Assert.That(result, Is.EqualTo(8));}}public class DataService{public async Task<string> GetDataAsync(){await Task.Delay(100);return "hello world";}public async Task<int> CalculateSumAsync(int a,int b){await Task.Delay(50);return a + b;}}[TestFixture]public class MockingTests{[Test]public void UserService_GetUser_ReturnsUserFromRepository(){var mockRepo = new Mock<IUserRepository>();var expectedUser = new User { Id = 1, Name = "Fred" };mockRepo.Setup(repo => repo.GetUser(1)).Returns(expectedUser);var userService = new UserService(mockRepo.Object);var result = userService.GetUser(1);Assert.That(result, Is.EqualTo(expectedUser));mockRepo.Verify(repo => repo.GetUser(1), Times.Once);}[Test]public void EmailService_SendEmail_CallsRepository(){var mockRepo = new Mock<IEmailRepository>();var emailService = new EmailService(mockRepo.Object);var email = "test@example.com";var message = "hello";emailService.SendEmail(email, message);mockRepo.Verify(repo => repo.SaveMail(It.Is<string>(x => x == email),It.Is<string>(m => m.Contains("hello"))),Times.Once);}}public interface IUserRepository{User GetUser(int id);}public interface IEmailRepository{void SaveMail(string email, string message);}public class UserService{private readonly IUserRepository repository;public UserService(IUserRepository repositoryValue){repository = repositoryValue;}public User GetUser(int id){return  repository.GetUser(id);}}public class EmailService{private readonly IEmailRepository repository;public EmailService(IEmailRepository repositoryValue){repository = repositoryValue;}public void SendEmail(string email,string message){repository.SaveMail(email, message);}}public class User{public int Id { get; set; }public string Name { get; set; }}
}

 

 

1.Rebuild;

2.Test/Run All Tests;

 

image

 

image

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从 EFI 到 GPT:深入理解现代计算机启动与磁盘分区技能

从 EFI 到 GPT:深入理解现代计算机启动与磁盘分区技能pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

2025年扁钢厂家最新权威推荐榜:强度与精度双重保障的工业脊

2025年扁钢厂家最新权威推荐榜:强度与精度双重保障的工业脊梁在制造业转型升级的关键时期,扁钢作为工业领域的"骨架材料",其质量直接影响着装备制造、建筑工程、轨道交通等行业的健康发展。随着新材料技术…

GJB 438C学习

系列标准宣贯︱GJB 438C中规定软件文档的用途与编写时机长风破浪会有时,直挂云帆济沧海! 可通过下方链接找到博主 https://www.cnblogs.com/judes/p/10875138.html

typora markdown

markdown学习 标题: +空格+标题名字 二级标题 +名称 以此类推每级加一个# 字体 hello,world! 左右 ** hello,world! * hello,workd! *** hello,workd! …

2025防爆数粒机厂家权威推荐榜:高效精准与安全防爆口碑之选

2025防爆数粒机厂家权威推荐榜:高效精准与安全防爆口碑之选在制药、化工、食品等工业领域,颗粒物料的精准计数与分装是生产流程中的关键环节。防爆数粒机作为特种设备,不仅需要满足高效精准的计数要求,更要具备严格…

想在浏览器里跑 AI?TensorFlow.js 硬件帮助完全指南

想在浏览器里跑 AI?TensorFlow.js 硬件帮助完全指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

Linux系统设置与理解主机名(hostname)的重要性

在Linux系统中,主机名(hostname)是区分网络中一台主机或者是服务设备的一个唯一标识。操作系统在网络通讯时会使用到主机名,它允许用户和程序方便地识别和交互。除了作为识别符,主机名在系统安全性、维护管理方面也…

CSharp: image (JPG,PNG,etc) covert webp using Aspose.Imaging

protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){// 激活Aspose//ActiveAspose(); ///无效HookManager.ShowHookDetails(true);HookManager.StartHook();// The path to the documents direct…

基于GPT2搭建医疗问诊机器人

基于GPT2搭建医疗问诊机器人2025-10-12 14:23 dribs 阅读(0) 评论(0) 收藏 举报1

2025耐磨轮胎厂家最新权威推荐榜:超强抓地力与持久耐用深度

2025耐磨轮胎厂家最新权威推荐榜:超强抓地力与持久耐用深度在商用车运输领域,轮胎作为车辆与路面唯一接触的部件,其耐磨性能直接关系到运营成本与行车安全。据统计,轮胎磨损占运输企业运营成本的比重不容忽视,优质…

在Vue 3项目中集成Element Plus组件库的步骤

安装Element Plus 首先,确保你的开发环境已经安装了Node.js和npm(或yarn)。然后,在你的Vue 3项目根目录下打开终端,并执行以下命令来安装Element Plus: npm install element-plus --save # 或者使用yarn yarn ad…

安装pytorch(win 11 +3060 laptop)

移除不兼容的pytorch版本运行代码时报错这个错误表明正在使用的 PyTorch 版本过旧,它不支持 torch.utils.data.DataLoader 的 persistent_workers 参数或属性。 卸载旧版 pip uninstall torch torchvision torchaudio…

MySQL数据库连接过多(Too many connections)错误处理策略

MySQL数据库遭遇“Too many connections”错误时,意味着当前所有可用的连接都已被使用,新的客户端连接无法建立。处理这一问题需要综合考虑配置调整、资源优化和代码改进等多方面因素。 首先,检查 max_connections设…

Real English Questions and Answers Practice

Real English Questions and Answers PracticeHello my friends and welcome back to Bookish English 2, the place where you live English, not just study it. Todays lesson is special. You will not read gramm…

[Python] Python配置uv环境

[Python] Python配置uv环境$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 安装uv02 创建项目03 uv安装python包3.1 uv add3.2 uv pip install(兼容…

SQL删除操作性能分析:移除300万条记录所需时间估算

数据库服务器硬件CPU: 删除操作会消耗CPU资源。如果处理器速度较慢或者负载较高,这将直接影响到删除操作的速度。 内存: 足够快速且充足量内存可以确保数据库缓冲区高效运行。 磁盘I/O: 删除大量数据会产生大量磁盘I/…

Spring Boot 基础教程 - 指南

Spring Boot 基础教程 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

Linux系统监控报告CPU软锁定问题(soft lockup)诊断方法

CPU软锁定问题,即软件锁定(soft lockup),是指CPU在一段时间内被一个内核进程占用而无法处理其他任务,通常是由于某个进程或驱动程序在内核空间执行了过长时间的循环或者死锁。这种情况下,系统可能无响应或响应非…

pytorch报告

首先对卷积神经网络的基本概念进行了详细阐述。他通过对比传统神经网络,指出了卷积神经网络在处理图像数据时的优势,即能够自动提取图像的特征,减少参数数量,提高模型的训练效率。对于卷积运算这一核心概念,UP 主…

Java语言操作INI配置文件策略

在Java中操作INI配置文件通常涉及到读取、解析、修改和保存配置信息。INI文件是一种简单的文本文件,其结构由节(section)、键(key)和值(value)组成,通常用于存储程序的配置信息。 下面是如何在Java中操作INI文件的策…