scala - scala : Mockito 中的模拟案例类

标签 scala testing mockito

在我的游戏应用程序中,我打算模拟一个案例类。我能够这样做,但它创建了一个所有成员变量都为空的对象。 有没有一种方法可以创建案例类的模拟对象,以便该对象可以初始化一些成员?

case class User(name: String, address: String)    
val mockUser = mock[User]
user.name // null
user.address //null

我如何创建一个 mockUser 以便我可以为名称和地址分配一些值?

编辑:

我需要模拟对象的能力,因为我想要其中一个成员方法的预定义行为。 (此成员方法调用外部服务,我不希望在进行单元测试时调用外部服务。)成员方法在我要测试的另一个成员方法内部调用。

最佳答案

它应该像这样简单:

when(mockUser.name).thenReturn("Bob")

至于:

You should never need to mock case classes. It's like "mocking an integer".

错了。 (恕我直言)

What's wrong with val mockUser = User("mockName", "mockAddress")?

如果你不觉得有什么问题的话就没什么

val mockFoo = FooWith20Properties("1", "2", "3",..."20")

您的测试会工作,但您错过了使用模拟框架来减少测试样板的要点。

话虽如此,认为案例类应该是最终的和那些认为案例类不应该是最终的似乎确实存在分歧。如果你将你的标记为 final,那么如果不求助于同样有争议的东西(例如 Powermock),模拟将无法工作。

关于scala - scala : Mockito 中的模拟案例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37184528/

相关文章:

scala - Play Framework 异步 Controller 阻止对同一 Controller 的后续调用

scala - 为什么第一个类型参数在 Function1[-A, +B] 中被定义为逆变?

Python:日期更改的单元测试

iphone - 在不越狱的情况下将自定义应用程序加载到 iOS 设备中?

java - Mockito ArgumentMatcher 任何对象[]

java - 单元测试 HttpURL 连接

scala - 如何在 spark 3.0 结构化流媒体中使用 kafka.group.id 和检查点以继续从 Kafka 中读取它在重启后停止的位置?

testing - JUnit 是黑盒测试还是白盒测试?

java - 我如何模拟 void 方法并使用 mockito 保留其他所有内容?

scala - 启动 Scala 程序时出现 NoSuchMethodException