【发布时间】:2015-09-27 14:45:51
【问题描述】:
我有一个关于在 junits 中使用 EasyMock 的问题。我们已经为junits 配置了一个框架,它使用inmemory derby 数据库和EasyMock 来测试我们的服务项目。我们在内存 derby 中完全使用 dao 层。问题出现在天气上是完全使用 EasyMock 还是在服务层一起使用 EasyMock 和 derby。下面是场景:
//class under test is in user-service project
class ServiceClassUnderTest {
IUserService userService;
IAddressService addressService;
public Address getUsersAddress(String id) {
User user = userService.getUserById(id);
// some logic goes here
Address address = addressService.getAddresdByUser(user);
// some validations goes here
return address;
}
}
被测类在用户服务项目中,IUserService 接口也是。而 IAddressService 接口位于地址服务项目中,用作用户服务项目中的依赖项。
现在的问题在于一些同事建议的方法改变。
我们过去遵循的方法
在同一个项目中为 userService 准备测试数据,并模拟 addressService 作为依赖项目的一部分,我们可能对它的行为和表结构不太了解
优势:更简洁的方法,因为我们有最少的模拟和测试数据代码在单独的 sql 文件中
建议的方法
模拟所有服务,无论它是在同一个项目中还是在依赖项目的一部分中
缺点:模拟相关代码多于实际测试相关代码,难以维护并影响可读性。
给出的代码示例仅用于解释在实际项目中我们具有更复杂的结构且单个类中有多个服务 bean 的场景。
您能否就哪种方法更好以及为什么要考虑我为这两种方法提供的论点给我您的建议??
【问题讨论】:
-
大家好,请您就应该遵循的方法给我您的反馈
标签: junit easymock in-memory-database