我是靠谱客的博主 腼腆衬衫,最近开发中收集的这篇文章主要介绍ScalaTest——测试分类,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

6.1 Pending待测试

占位符,方便记下一个想法,但是还没有实现或者还没准备好。

待测试(Pending Test)这个思想我觉得在实际中会用的比较多。pending是一个占位符,可以将尚未实现或定义的测试以pending来填充。Pending Test实际上就是利用pending来将测试标记为TODO的。如下面的例子:

class AlbumSpec extends FunSpec with Matchers with GivenWhenThen {
describe("An Album") {
it("can add an Artist to the album at construction time") {pending}
it("can add opt to not have any artists at construction time") {pending}
}
}

运行测试,得到如下结果:

[info]AlbumSpec:
[info]An Album
[info]- can add an Artist to the album at construction time (pending)
[info]- can add opt to not have any artists at construction time (pending)

可以看到,测试都被标记为了pending

我们可以将pending关键字一直放在测试的最下面,直到一个测试完全的写完。如下面的例子:

class AlbumSpec extends FunSpec with ShouldMatchers {
describe("An Album") {
it("can add an Artist to the album at construction time") {
val album = new Album("Thriller", 1981, new Artist("Michael", "Jackson"))
info("Making sure that Michael Jackson is indeed the artist of Thriller")
pending
}
it("can add opt to not have any artists at construction time") {pending}
}
}

运行测试,如我们所料,将输出下面的结果:

[info]AlbumSpec:
[info]An Album
[info]- can add an Artist to the album at construction time (pending)
[info]
+ Making sure that Michael Jackson is indeed the artist of Thriller
[info]- can add opt to not have any artists at construction time (pending)
6.2 Ignore标记忽略测试

开发人员不确定测试的有效性,或者生产代码已经淘汰了,抑或生产代码太复杂,所以暂时需要忽略这些测试代码。

可能有这么一种情境:某个测试案例,可能由于生产代码被修改而处于一种可有可无的状态。如果留着,在进行测试的时候浪费执行时间,如果删除又怕在后期还要使用到。此时可以使用ignore来标记该测试,这样在执行test指令时将不会运行它,但同时又将它保存下来了。如下面的例子:

import org.scalatest.{FunSpec, ShouldMatchers}
class AlbumTest extends FunSpec with ShouldMatchers {
describe("An Album") {
it("can add an Artist object to the album") {
val album = new Album("Thriller", 1981, new Artist("Michael", "Jackson"))
album.artist.firstName should be("Michael")
}
ignore("can add a Producer to an album at construction time") {
new Album("Breezin'", 1976, new Artist("George", "Benson"))
//TODO: Figure out the implementation of an album producer
}
}
}

运行测试,将得到如下的输出:

[info]AlbumSpec:
[info]An Album
[info]- can add an Artist to the album at construction time
[info]- can add a Producer to an album at construction time !!! IGNORED !!!

这是因为第二个测试can add a Producer to an album at construction time中的itignore给替代了,在运行测试时,它将被忽略。在上面的输出结果中的反映就是在测试名后面加上了!!! IGNORED !!!。如果要恢复这个测试,只需要将ignore替换成it就好了。

6.3 Tag分类测试

标记(Tagging)功能给测试加上标签,这样就可以分组运行测试了。标记可以在下面这些场景中运用:

  • 你想跳过某些很费时的测试
  • 某些测试是检查一些相关的功能需要在一起执行
  • 你想给测试分成单元测试综合测试验收测试等分类时

不同的测试接口对标记都有自己的实现,但都是使用字符串来进行分类标记。如下面的例子:

it("can add an Artist to the album at construction time", Tag("construction")) {
// 其它代码
}

上面的例子是在FunSpec接口中的实现,给can add an Artist to the album at construction time这个测试添加了construction的标记。

在SBT中运行特定标记的测试也有一些需要注意的地方:

  • SBT的test命令暂时还不能支持运行指定标签的测试
    SBT支持多种测试框架,要使test命令能够按指定标签执行测试,则需要所有SBT支持的测试框架都支持标签功能,现在ScalaTest、Specs2都支持了标签,但ScalaCheck目前并不支持标签功能。

  • SBT的test-only命令是支持执行指定标签的测试的
    可以用下例中的方式使用test-only命令来运行指定的测试:
    test-only AlbumTest – -n construction

在待测试类名的后面加上–再加上n再加上标签,来指行指定的测试(有多个标签 则需要用双引号"将标签包围起来)。如果要排除某个标签,将前面说的n换成l即可。

最后

以上就是腼腆衬衫为你收集整理的ScalaTest——测试分类的全部内容,希望文章能够帮你解决ScalaTest——测试分类所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部