是否有使用 Scala+PlaySpec+Mockito 的每次测试非特定模拟重置模式?

Is there a per-test non-specific mock reset pattern using Scala+PlaySpec+Mockito?

我正在为 Scala Play 应用程序编写单元测试套件,我想知道是否有任何类似于 java 的

@Mock
private Foo foo;

@Autowired/InjectMocks
private Bar fixture;

@BeforeMethod
public void setUp() {
  MockitoAnnotations.initMocks(this);
}

用于自动模拟带注释的 class 并在每次测试后重置它

目前我正在接受

TestClass extends PlaySpec with BeforeAndAfterEach

private val foo = mock[Foo]

override def fakeApplication(): Application = 
  new GuiceApplicationBuilder().overrides(bind[Foo].toInstance(foo)).build

override protected def beforeEach(): Unit = {
  reset(foo)
}

在 Scala 测试中使用 java 注释的粗略尝试没有成功。我目前的方法 有效 ,我只是想确保没有更好的方法。

mockito-scala 从 0.1.1 版本开始解决了这个问题,因为它提供了一个特性 (org.mockito.integrations.scalatest.ResetMocksAfterEachTest) 有助于在每次测试 运行

特性必须在org.mockito.MockitoSugar之后混合才能工作,否则你的测试将无法编译

所以你的代码应该是这样的

TestClass extends PlaySpec with MockitoSugar with ResetMocksAfterEachTest

private val foo = mock[Foo]

override def fakeApplication(): Application = 
    new GuiceApplicationBuilder().overrides(bind[Foo].toInstance(foo)).build

主要优点是不必记住手动重置每个模拟...

如果出于某种原因你想要一个在使用这个特性时不会自动重置的模拟,那么它应该是 通过 org.mockito.MockitoSugar 的伴随对象创建,因此不被此机制跟踪

免责声明:我是该库的开发人员