【问题标题】:Is it possible to mock / stub methods of the same test class with ScalaMock?是否可以使用 ScalaMock 模拟/存根方法?
【发布时间】:2021-07-16 17:36:43
【问题描述】:

使用 Mockito 和其他测试框架,通常有一些方法可以模拟测试类中方法的功能。我似乎无法让 ScalaMock 接受同样的方式。

class A {
 def methodUnderTest()
 def methodUsedInMethodUnderTest()
}

那么在测试课上我是:

(A.methodUsedInMethodUnderTest _)
.expects.....
a.methodUnderTest shouldEqual ..

我知道,如果您在模拟/存根类,然后在真实实例上调用相同的功能,这将不起作用。但是有一些解决方法可以通过对两个调用等使用模拟来实现。

如果这是错误的方法,那么在同一测试类中测试使用其他方法的方法的最佳方法是什么?我认为将方法解耦是最佳实践。

谢谢!

【问题讨论】:

  • 标准方法有什么问题 - 创建类型 A 的模拟实例和模拟方法UsedInMethodUnderTest?
  • 我不明白您要解决哪个问题。
  • @Ava Yeap,所以尝试过,似乎 ScalaMock 框架无法做到这一点。
  • @Jasper-M 基本上我试图模拟一个在我试图测试的方法中使用的方法。但通常像 Ava 建议的解决方法似乎无法通过 ScalaMock 实现,并且很好奇是否有办法做到这一点。

标签: scala unit-testing scalamock


【解决方案1】:

如果我正确理解您的问题,您可以创建 A 的模拟,然后告诉 ScalaMock 执行 methodUnderTest 的实际实现。

val aMock = mock[A]

when(aMock.methodUnderTest).thenCallRealMethod()
when(aMock.methodUsedInMethodUnderTest).thenReturn(someValue)

aMock.methodUnderTest shouldEqual someOtherValue

【讨论】:

  • 啊,这可能是它!我明天会测试这个并报告!
猜你喜欢
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2015-01-17
  • 2015-10-26
  • 2018-04-21
相关资源
最近更新 更多