NSubstitute(简称 NSub)是一套友善的 .NET 隔离框架套件,让开法者以简单、乾净的语法撰写测试,这套框架是采用 3A 原则 (Arrange-Act-Assert) 和测试驱动开发(Test Driven Development, TDD)为核心设计出来的套件(翻译自 NSubstitute 在 Nuget 的介绍)。虽然这边是以 NSubstitute 为范例,但这边所撰写的逻辑也大都适用於其他的隔离框架如 Moq、FakeItEasy、NSubstitute、Typemock Isolator 与 JustMock。
那接下来介绍如何在测试专案上安装 NSubstitute,其截图如下(以 Visual Studio For Mac 为例):
那介绍 NSubstitute 语法之前,我们先简单回顾 Day-10 所写的商业逻辑、假物件与测试,如下:
此段为建置 Email 通知系统的商业逻辑与介面:
public class EmailSystem
{
private IEmailService EmailService;
public EmailSystem(IEmailService inEmailService)
{
EmailService = inEmailService;
}
public string EmailFunction(string mailAddress, string mailMessage)
{
var SendResult = EmailService
.SendEmail(mailAddress, mailMessage);
return SendResult;
}
}
public interface IEmailService()
{
public string SendEmail(mailAddress, mailMessage);
}
而此段为建置 Email 通知系统的测试与虚设常式:
using NUnit3;
[TestFixture]
public class EmailSystemUnitTests
{
[Test]
public void EmailFunction_Success()
{
// Arrange
StubEmailSerivce stubEmailService = new StubEmailSerivce();
EmailSystem EmailService = new EmailSystem(stubEmailService);
// Act
var stubResult = EmailSystem
.EmailFunction("[email protected]", "Test Demo");
// Assert
Assert.AreEqual("Success", stubResult);
}
}
public class StubEmailSerivce : IEmailService
{
public string SendEmail(EmailAddress, EmailMessage)
{
return "Success";
}
}
在这边我们手刻了一个 StubEmailSerivce 的虚设常式,做为 IEmailService 的实作;倘若今天用 NSub,则程序码如下:
using NUnit3;
[TestFixture]
public class EmailSystemUnitTests
{
[Test]
public void EmailFunction_Success()
{
// Arrange
IEmailService stubEmailService = Substitute.For<IEmailService>();
stubEmailService.SendEmail("[email protected]", "Test Demo").Returns("Success");
EmailSystem EmailService = new EmailSystem(stubEmailService);
// Act
var stubResult = EmailSystem
.EmailFunction("[email protected]", "Test Demo");
// Assert
Assert.AreEqual("Success", stubResult);
}
}
上述的过程中,NSub 新增虚设常式做了两个步骤:
这样子,Day-10 的手刻的物件就改成了 NSub 的写法,接下来会开始介绍 NSub 的一些基本用法。
<<: 110/01 - 什麽!startActivityForResult 被标记弃用?
>>: 【把玩Azure DevOps】Day4 版本控制系统Repos:初探Git Repo
设定 BMO 初始化、更新要更新什麽、画出 BMO 的方法 class Bmo { constru...
PHP函数 匿名函数 匿名函数(Anonymous functions),也称作闭包函数(closu...
今天我们来还债 XDD,还之前跳过的很多解释,还有如何更加灵活的调整神经网路 那就让我们一步一步来...
一样先确认使用者在文件库有哪些文件 确认传送来的文件doc_id是属於使用者 确认文件存在後回传Ht...
研究生和大学生不同,跟着指导的教授有着独立的研究室,以滞留时间来看,可说是研究生的第二个家。 「呐,...