创建模拟对象的最佳实践,该模拟对象将成为另一个模拟对象的一部分

时间:2014-12-09 16:16:08

标签: java testing mocking mockito

我有一个具有User对象的安全模型。此User对象与2个不同的对象(Roles对象和Permissions对象具有1对多的关系 - 请注意不同的Role和不同的{{1可以引用相同的Permission。我正在编写一个测试(必然是一个单元测试)来测试UserRoles集合的功能及其方法,但我不确定如何创建将成为上述对象一部分的Permissions对象。

我应该创建一些mockito' d User个对象,还是在User下创建一个真实的对象?有更好的方法吗?请注意,我是mockito的新手!

1 个答案:

答案 0 :(得分:2)

看起来UserRolesPermissions都是data or value objects:它们实际上没有要测试的交互,但只是为了保存结构化数据而存在。这使得使用真实对象而不是煞费苦心地模仿模拟非常引人注目:为什么在when(mockUser.getUserName()).thenReturn("bob")工作得更好或更好时写User user = new User("bob")?当你有setter时尤其如此:Mockito不太适合让getFoo()在setFoo(X)之后立即返回X.

如果是这样,创建所有这三个对象的真实实例应该是安全且容易的,并且为测试手动关联它们。您可以提取一个测试助手,创建并关联用户/角色/权限的可预测图表。

如果您的模型对象包含archivedeletesendEmail等方法,则互动变得更加重要,您可以考虑使用fakeselectively-stubbed partial mock。但是,此时,您的模型对象可能会附加到存储库或服务对象,这可能更适合替换您的测试。

相关问题