当前位置: 首页 > 知识库问答 >
问题:

Scala模拟部分残茬

厍彭薄
2023-03-14
class TeamService(val dep1: D1) {

  def method1(param: Int) = param * dep1.magicNumber()

  def method2(param: Int) = {
    method1(param) * 2
  }
}
val teamService = ??? // creates a stub
(teamService.method1 _).when(33).returns(22)
teamService.method2(33).should be(44)

有没有办法做到这一点?

共有1个答案

华昕
2023-03-14

正如其他问题中所建议的,这里和这里,我们可以将stub与final结合起来。来自ScalaMock常见问题:

我可以模拟final/private方法或类吗?

这是不受支持的,因为用宏生成的模拟是作为要模拟的类型的子类实现的。因此不能重写private和final方法

it should "test" in {
  val teamService = stub[TeamService]
  (teamService.method1 _).when(33).returns(22)
  teamService.method2(33) shouldBe 44
}
it should "test" in {
  class PartFinalTeamService(dep: D1) extends TeamService(dep) {
    override final def method2(param: Int): Int = super.method2(param)
  }

  val teamService = stub[PartFinalTeamService]
  (teamService.method1 _).when(33).returns(22)
  teamService.method2(33) shouldBe 44
}
 类似资料:
  • 我试图测试一个类,它具有两个函数:和。加载,调用,然后执行一些操作并返回新的。为举例起见: 使用如何编写测试代码? 我试过: 我希望测试成功通过,并且得到(我知道scalamock用mock替换了所有现有函数,但这不是预期的行为) 编辑:我在mockito中找到了这个引用这个概念的答案,但我不确定scalamock是否支持这种嘲讽,以及为什么要反对这种嘲讽。

  • 我有以下场景: 我想在测试中覆盖公共方法methodA()的catch块。我不想更改私有方法的可见性。是否有任何方法可以使用EasyMock实现私有方法的部分模拟?或者有没有办法改变Junit类中私有方法的行为,以便在不使用mocking的情况下抛出异常? 提前谢谢。

  • 问题内容: 我正在使用并测试异步操作创建者中的API调用。 当我使用这样创建的实例时,我无法使其工作: 我会像这样消耗它: 这是我的测试文件: 而且我只能执行一个操作,因为。 我尝试了多种方法来嘲笑该方法,但没有真正知道自己在做什么。 问题答案: 好,我知道了。这是我的解决方法!我最终 没有 做任何模拟库! 创建一个模拟在: 然后在您的测试文件中,要旨将如下所示:

  • 我有几个类遵循“模板方法”模式。抽象类A,具体扩展类B和C,如下所示: 我想编写一个测试来验证当getData()抛出某个Exception时是否抛出其他Exception。我真的希望避免模拟强制getData()抛出所需的所有复杂依赖关系。我不关心getData()如何抛出,我只想让它抛出。所以我想我要的是部分模拟。这就是我所拥有的: 这个测试在我看来很好,但当我运行它时,我得到了这样的结果:

  • 我正在为我的服务层编写单元测试。我的服务层有多个自动生成的字段。我想只模拟其中一个和其他初始化为自动驾驶。 服务接口 服务实现 测试类 我只想嘲笑productRepository字段,但不想嘲笑productManager 问题是productManager 是否可以自动初始化它们?就像它们在运行带有完全加载的上下文的Spring引导应用程序时被初始化一样。

  • 代码示例: 第二个问题--模拟scala对象,似乎需要使用其他方法来创建这样的服务。