我们浏览了一些在线资料,比如最有规模的网站。使用scala测试框架Specs2的优点是什么?它如何通过JUnit添加到项目中?
发布于 2015-03-31 00:38:50
我有点不愿意回答这个问题,因为这是一个相当主观的问题。
但我可以把它概括为,“就像Scala给您提供了解决问题的新的、更干净的方法一样,Specs2为您提供了在JUnit"上测试的新方法和更干净的方法。
以下是一些简单的例子:
莫基托是一位一流的公民。
莫基托是我最喜欢的JVM模拟库;与Specs2一起使用它和混合在一个特性中一样简单,您可以得到一个很好的DSL来进行验证:
class MySpec extends Specification with Mockito {
// Setup:
val mockConnection = mock[Connection]
...
// Verification: (in a test)
there was one(mockConnection).get("www.google.com")
} ScalaCheck是一个一流的公民。
ScalaCheck可以为您的函数节省大量时间--“模糊”输入,而且,一种简单的性状混合在您的Specs2测试中为您提供了所有的功能。
在Scope中运行测试
你有没有遇到过这样的问题:测试会在你的机器上工作,但在其他地方会崩溃,因为你的机器会按一定的顺序运行?还是因为合作伙伴之间的相互作用而进入“嘲笑地狱”?Specs2允许您将整个测试置于包含所有状态的作用域中,并阻止它泄漏到其他测试中:
class AnotherSpec extends Specification with Mockito {
class FooScope extends Scope {
val mockResponse = mock[Response]
val mockConnection = mock[Connection]
...
mockConnection.execute returns mockResponse
def frobulate(s:String) = {
// Use mockResponse, mockConnection, etc ...
}
}
"My thing" should {
"Do stuff" in new FooScope {
frobulate("hello")
there was one(mockConnection).post(...)
}
}Scope帮助您干燥测试,并阻止它们之间的状态泄漏。
加号
"My thing" should)"throw an exception if argument < 0" in)result must have length(7))result must beNone)pending进行测试不利方面
为了使这个答案更加客观,我还应该指出关于编译时间的这篇文章是由尊敬的比尔·文纳斯撰写的,它指出,由于大量的隐式和函数声明,Specs2 mutable.Specification的编译速度几乎比一个大致相同的JUnit测试慢一个数量级。它也不会比大量的测试规模更大。或者说,至少在2013年初写这篇文章的时候没有。现在有了您可以使用的方法来解决这个问题。
https://stackoverflow.com/questions/29348008
复制相似问题