我们测试过了几个案例,像是 测试更新标签时如过滤Admin,结果应不出现Admin
和 测试更新标签时如过滤Admin和Author,结果应不出现Admin和Author
。
不过,我们会发现到,我们不太可能去撰写 removeTag()
所有的组合出来,然後每组都加上测试。这样既大量增加测试案例的数量,又导致测试很难维护。
这时,我们导入另一个观念:整合测试和单元测试。
简单的说,整合测试就是我们之前所做的 测试更新标签时如过滤Admin和Author,结果应不出现Admin和Author
这类测试。
要能成功执行这段测试,我们需要 removeTag()
和 updateUsersTags()
两个函数进行互动,才能通过这个测试案例。
实务上根据程序码的调整,随着程序逐渐拆细,满足一个功能所需的互动元件越来越多,会有很多的案例属於这种情况。
整合测试可以实际的呈现满足这段需求时,各个元件互动是否正确,是非常重要的一种测试方式。
但是,随着元件越来越多,我们不太可能将所有元件互动的可能都列举出测试案例。这时候我们可能会开始构思,是否该测试单一的元件就好。
这时候,我们就可以引入单元测试的概念了。
单元测试,也就是我们测试的对象,从一堆元件之间互动所满足的功能,变成了针对单一个元件的功能所进行的测试。
以目前这些程序来说,我们最小的元件单位,也就是函数们。更具体来说,就是 updateUsersTags()
和 removeTag()
不考虑组合出来的功能,而是单看这些元件的话,其实 removeTag()
要满足的是给他一堆 tag
,能够移除不要的 tag
。 updateUsersTags()
则是要更新 tag
并执行 filter
参数内的内容。
所以,我们来写第一个单元测试吧!
removeTag()
的单元测试首先,我们先建立 tests/kotlin/RemoveTagKtTest.kt
针对 removeTag()
我们测试看看以下几个案例:
能正确移除标签,不移除多余标签
能正确处理移除标签不存在的状况
能正确处理无标签传入的状况
我们来写看看 能正确移除标签,不移除多余标签()
@Test
fun `能正确移除标签,不移除多余标签`() {
initDatabase()
transaction {
val testTags = makeTestTags(2)
testTags[0].name = "Admin"
val filteredTag = testTags.removeTag("Admin")
Assert.assertThat(filteredTag, not(hasItem(testTags[0])))
Assert.assertThat(filteredTag, hasItem(testTags[1]))
}
}
这边我们一样利用 initDatabase()
和 makeTestTags()
协助我们建立测试环境。
通过测试之後,这个测试情境我们就通过了。
能正确处理移除标签不存在的状况()
@Test
fun `能正确处理移除标签不存在的状况`() {
initDatabase()
transaction {
val testTags = makeTestTags(2)
val filteredTag = testTags.removeTag("Admin")
Assert.assertThat(filteredTag, `is`(testTags))
}
}
这段逻辑很简单,应该不会有什麽难以理解的部分。
最後,我们来写看看 能正确处理无标签传入的状况()
@Test
fun `能正确处理无标签传入的状况`() {
initDatabase()
transaction {
val testTags = makeTestTags(0)
val filteredTag = testTags.removeTag("Admin")
Assert.assertThat(filteredTag, `is`(makeTestTags(0)))
}
}
撰写之後执行看看,如果顺利的话,这段测试应该也能正常通过。
这样,针对 removeTag()
的三个情境,我们就都成功的测试过了!
接续上一次的内容,今天一样会用较为简单的叙述去介绍与分享SQL的简易语法与函数。(大写为内建语法) ...
紧接着,我们就要来介绍 while、for 回圈啦!但是在介绍之前,要先提到一些基本但常用的运算子。...
今天要讲的是 施完咒语後,要装的内容物,而这个内容物可以有很多种模样 就是所谓的资料型态 而今天要讲...
随着智慧型手机的普及 网页设计也要随着时代的潮流而写出适合智慧型手机用户的网页 今天的笔记是目前最常...
音乐播放器 虽然 Mac Os , Linux, Windows 都内建了音乐播放器,但他们仍有一些...