我希望能够使用我们已经内部开发的JUnit规则,例如TemporaryFolder或其他TestRule
最好的方法是什么?我知道JUnitSuite,但它似乎没有使用@Rule注释。
无论如何,我还是想使用另一个ScalaTest套件。

所以我的问题是:


ScalaTest套件是否支持JUnit规则?
如果没有,那里是否有可以使用Junit TestRule的库?
如果没有,如何在Scala测试中使用JUnit TestRule
还是有一种更合适的Scala专用方法来完成TemporaryFolder的内容,或者例如Stefan Birkner的System Rules提供的内容?




这是我尝试使用JUnitSuite的方法:

class MyTest extends JUnitSuite {
  //@Rule
  //val temporaryFolder = new TemporaryFolder() // throws java.lang.Exception: The @Rule 'temporaryFolder' must be public.

  @Rule
  def temporaryFolder = new TemporaryFolder()

  @Test
  def test: Unit = {
    assert(temporaryFolder.newFile() !== null) // java.lang.IllegalStateException: the temporary folder has not yet been created
  }
}

最佳答案

您可以通过创建类型为TemporaryFolder的成员字段并通过@Rule函数返回此字段值来解决该问题。

class MyTest extends JUnitSuite {

  val _temporaryFolder = new TemporaryFolder

  @Rule
  def temporaryFolder = _temporaryFolder

  @Test
  def test: Unit = {
    assert(temporaryFolder.newFile() !== null)
  }
}

10-07 12:15