在ScalaTest中,`should`,`can`,`must`之间有什么区别

Mar*_*rco 22 unit-testing scala scalatest

刚开始使用ScalaTest,我非常喜欢它.

仅仅阅读的文档我迄今一直无法弄清楚是否有任何实质性的区别can,should以及must条款的FlatSpec.

特别是,我想知道must失败是否与一个失败有什么不同should- 或者仅仅是"语法糖"使得测试更好地自我记录.

mik*_*łak 22

should并且must在语义上是相同的.但这不是关于更好的文档,它基本上只是个人风格偏好(我更喜欢must).

can有点不同.你不能(nomen omen)直接使用它作为匹配器,它只能在测试描述符中使用.引用自FlatSpec:

注意:您可以在FlatSpec中使用must或can.例如,而不是它应该"弹出......,你可以写它必须"pop ...或者它可以"弹出......

(同样适用于WordSpec两个 相应的夹具类)

请注意,在短时间内(我认为在ScalaTest 2.0.x中),must不推荐使用,但在2.1.0中,该决定已被撤销:

复活的MustMatchers包org.scalatest.更改了org.scalatest.matchers.MustMatchers的弃用警告,建议使用org.scalatest.MustMatchers而不是org.scalatest.Matchers,这是2.0中的建议.向升级到2.0时迁移到的用户必须已经道歉.

  • 我将在文档中添加一个说明.should和must之间的区别之前已经混淆了ScalaTest用户,这也是我试图在2.0中弃用MustMatchers的一个原因.另一个是我想稍后添加"纯断言",并认为它们应该看起来不同,所以我将重用"必须".一些用户要求"必须"回复建议使用"will"纯粹.正如Tomato所说,应该而且必须在ScalaTest中以编程方式执行相同的操作,但有些用户认为它们在语义上并不相同.我建议您选择一个动词并始终如一地使用它. (4认同)
  • 谢谢你,谢谢.如果这样的段落出现在例如入门指南中,那就太好了.(我混淆的原因可能是由于我熟悉RFC的文档,其中SHOULD和MUST在语义上是不同的). (2认同)