从图中可以看到 HelloBank 方案当中有两只专案,一只是 HelloBank 专案(对应於软件开发就是商业逻辑开发的 Library);另一支专案则是 HelloBankTest,是测试 HelloBank 的单元测试专案。GitHub HelloBank Startup 的专案已提供 HelloBank 的原始码;因此我们会将焦点放在 HelloBankTest 这只类别上。
依据 NUnit Docs 官方网站提供了这几个语法的定义。
[TestFixture]:This is the attribute that marks a class that contains tests and, optionally, setup or teardown methods.
[Test]:The Test attribute is one way of marking a method inside a TestFixture class as a test. It is normally used for simple (non-parameterized) tests but may also be applied to parameterized tests without causing any extra test cases to be generated.
[TestCase]:TestCaseAttribute serves the dual purpose of marking a method with parameters as a test method and providing inline data to be used when invoking that method.
就我目前使用的观点来说,[TestFixture] 是注记这个类别是 NUnit 测试的类别,[Test] 与 [TestCase] 都是注记该方法为要执行的测试单元,两者最大的差别在於测试单元是否需要代入参数(若相同的测试单元需要做大量不同的案例测试,就会使用 TestCase)。
做完初始化的 NUnit 设定,接下来可以开始撰写第一支单元测试。
而这次的预设情境是现在有位使用者在帐户上存了一笔钱,我们要在测试中检测使用者存进去的钱是否符合预期的结果,因此,把提供的 Startup 专案中的 Test1 改成如下的写法:
[Test]
public void Adding_Funds_Updates_Balance()
{
// Arrange
// Act
// Assert
}
Arrange 阶段就是新增物件,以方便後面的阶段呼叫类别的属性或方法,写法如下:
[Test]
public void Adding_Funds_Updates_Balance()
{
// Arrange
BankAccount account = new BankAccount(1000);
// Act
// Assert
}
目前此范例是呼叫自己撰写的建构子方法建构新的物件;然而,现今实际开发系统时,大多是引用第三方套件新增物件,仅少许时候是呼叫自己开发的类别;因此,在之後「单元测试-核心技术」阶段,会进一步探讨在 Arrange 阶段,如何导入假物件 (Fake),假物件中又分了虚设常式 (Stub) 与模拟物件 (Mock)。
Act 阶段为利用物件处理商业逻辑,处理完商业逻辑後再将结果传至验证阶段,写法如下:
[Test]
public void Adding_Funds_Updates_Balance()
{
// Arrange
BankAccount account = new BankAccount(1000);
// Act
account.Add(500);
// Assert
}
此范例利用帐户里面的存款功能,在这新帐户储存了 500 元,而原先帐户有 1000 元。因此,最终的帐户余额应有 1500 元。
Assert 阶段是验证其成果是否符合开法者的想法,如同单元测试的艺术提到Assert 类别是商业逻辑的程序码与 NUnit 测试框架中间的桥梁,用来确认在该假设下某个期望应该成立
,写法如下:
[Test]
public void Adding_Funds_Updates_Balance()
{
// Arrange
BankAccount account = new BankAccount(1000);
// Act
account.Add(500);
// Assert
Assert.AreEqual(1500, account.Balance);
}
一只优秀的单元测试很大的重点就在於如何做最後的验证,除了范例中利用的回传值验证方式,在单元测试的艺术还有提到两种验证方式:基於状态的测试(俗称状态验证)和与相依物件之间的互动,同样也会在「单元测试-核心技术」阶段做进一部探讨。
最後,写完这段程序码之後,就可以进行第一次的测试了。
以下分别提供 Windows 与 Mac 如何执行测试的画面截图:
Windows:
(1) 点开测试并执行所有测试:
(2) 查看测试结果:
Mac:
(1) 点开检视:
(2) 点开测试并执行:
(3) 查看测试结果(右侧或下侧都可以观看结果):
因为之後需要确认目标 IP ,因此以下以图解的方式,带大家确认靶机的 IP,笔者使用 Window...
这是关於在 hahow-开启资料科学的学习大门 - R入门教学-课程的心得。 Day1 关於R R由...
从Android 3.0(API11) 起,Google 支援Fragment。今天稍微说说什麽是F...
DevOps 组别 https://wolkesau.medium.com/devops-组别-37...
您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 (延续昨天) #演算法 library(Clu...