斯卡拉的模拟案例类:Mockito

kon*_*tor 2 testing scala mockito

在我的播放应用程序中,我打算模拟一个案例类.我能够这样做,但它创建了一个所有成员变量为null的对象.有没有办法创建案例类的模拟对象,以便对象可以初始化一些成员?

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

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

编辑:

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

Nic*_*ick 10

它应该像这样简单:

when(mockUser.name).thenReturn("Bob")
Run Code Online (Sandbox Code Playgroud)

据,直到...为止:

你永远不需要模拟案例类.这就像"嘲笑一个整数".

假.(恕我直言)

val mockUser = User("mockName","mockAddress")有什么问题?

没有,如果你不认为有任何问题

val mockFoo = FooWith20Properties("1", "2", "3",..."20")
Run Code Online (Sandbox Code Playgroud)

您的测试将起作用,但您已经错过了使用模拟框架来减少测试样板的意义.

话虽如此,那些思维案例类应该是最终的和那些不那样的东西之间似乎存在分歧.如果你标记你的最终版,那么嘲笑就不会在没有诉诸诸如Powermock等同样有争议的事情的情况下工作.


Dim*_*ima 7

你永远不需要模拟案例类.这就像"嘲笑一个整数".

怎么了val mockUser = User("mockName", "mockAddress")

  • 这个设计有很多错误,我甚至不知道从哪里开始.你不应该嘲笑案例类......案例类不应该调用外部服务...你不应该模拟你正在测试的对象...应该隔离对外部服务的调用,这样你就可以自己将它们存在......但是,在更基本的层面上,你是如何计划在一个你只是嘲笑的对象上"测试一个成员方法"? (6认同)