gpt4 book ai didi

scala - 支持使用 Specs2 进行单元样式测试的验收样式测试?

转载 作者:行者123 更新时间:2023-12-01 07:40:10 26 4
gpt4 key购买 nike

在 Specs2 的上下文中,纯粹主义者可能会争辩说应该使用单元测试风格来进行单元测试。 Specs2 验收测试样式 用于进行验收测试。这听起来很明显 ;-)

但是,我更喜欢编写单元测试的验收测试风格(主要是为了保持一致性)。有什么技术原因我不应该这样做吗?

我只是喜欢以相同的风格编写所有测试的一致性,而且对于我的项目所有者(不是技术人员)来说,单元测试风格有点难以驾驭。虽然验收测试风格允许他们在偶然发现缺失功能时添加新测试,例如:

"Cool new feature" ! todo ^

正如您从下面的示例(改编自 Specs2 site )中看到的那样,验收测试风格对于非极客的人来说更具可读性,并且可以更好地分离关注点,尤其是在规范变得更大时。此外,它可能会导致更具组合风格或编写测试。

单元测试风格:

  import org.specs2.mutable._

class HelloWorldSpec extends Specification {

"The 'Hello world' string" should {
"contain 11 characters" in {
"Hello world" must have size(11)
}
"start with 'Hello'" in {
"Hello world" must startWith("Hello")
}
"end with 'world'" in {
"Hello world" must endWith("world")
}
}
}

验收测试风格:

 import org.specs2._

class HelloWorldSpec extends Specification { def is =

"This is a specification to check the 'Hello world' string" ^
p^
"The 'Hello world' string should" ^
"contain 11 characters" ! e1^
"start with 'Hello'" ! e2^
"end with 'world'" ! e3^
"do something cool" ! todo^
"do something cooler" ! todo^
end

def e1 = "Hello world" must have size(11)
def e2 = "Hello world" must startWith("Hello")
def e3 = "Hello world" must endWith("world")
}

谁知道呢,有一天,甚至可能会以多个文件结束,并使用字符串插值(或其他方法)和额外的解析例程,使 DSL 更具可读性:

HelloTest.specs2

  s"
This is a specification to check the 'Hello world' string
=========================================================

The 'Hello world' string should
-------------------------------
- $e1 contain 11 characters
- $e2 && $e3 start with 'Hello' and end with 'world'
- $todo do something cool
- $todo do something cooler
"

MyAppSpec2.scala

 import org.specs2._

class HelloWorldSpec extends Specification { def is = HelloTest.specs2

def e1 = "Hello world" must have size(11)
def e2 = "Hello world" must startWith("Hello")
def e3 = "Hello world" must endWith("world")
}

最佳答案

没有技术原因不能使用“Acceptance”风格来编写单元测试,相反使用“Unit”风格来编写验收测试(因为你可以使用带有代码折叠的编辑器来仅显示文本,或者您可以使用 plan 参数执行规范并在不执行示例的情况下获取规范的全文)。

不过,您需要注意两个“技术”事项:

  • “单元”规范使用变量来注册示例,因此如果您有任何机会尝试使用不同的线程构建此类规范,它就会遇到并发问题

  • “验收”规范使用示例的最后一个值作为结果。因此,默认情况下,当您想在示例中每行写一个期望值时不太方便。要解决此问题,您需要混入 ThrownExpectation 特征或在期望之间使用 and 运算符

最后,我一定会研究在 Scala 2.10 发布时使用字符串插值作为验收规范的可能性。

关于scala - 支持使用 Specs2 进行单元样式测试的验收样式测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13446891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com