【发布时间】:2014-06-07 18:40:42
【问题描述】:
通过使用 JMockit @Capturing,它无法捕获对任何 spring data jpa 存储库方法的调用。
public interface UserRepository extends JpaRepository<UserEntity, Long> {
UserEntity findByName(String name);
}
public class DefaultUserService implements UserService {
public User getUser(Long id) {
return userRepo.findOne( id );
}
public User getUser(String name) {
return userRepo.findByName( name );
}
}
public class UserServiceTest extends AbstractServiceTest {
@Inject UserService userService;
**@Capturing UserRepository userRepo;**
@Test
public void getUser_ShouldReturnUserObject() {
**new Expectations() {{
userRepo.findByName(anyString);
result = new UserEntity(1l, null, null, null, null);
}};**
User user = userService.getUser("abc");
assertNotNull(user.getId());
assertEquals(1l, user.getId().longValue());
}
}
但是通过替换
用户存储库
与
JpaRepository<UserEntity, Long>
在测试类中,JMockit 能够拦截对 JpaRepository 接口中任何可用方法的调用,例如 findOne() 或 findAll()。
但它只是无法捕获对扩展 JpaRepository 的自定义存储库方法的调用,例如 findByName()。
我更喜欢在这种情况下使用 @Capturing,尽管基于 JMockit 状态的测试(例如 MockUp 和 Deencapsulation)可以解决这个问题,因为它更简单。
有人有解决这个问题的想法吗?
【问题讨论】:
标签: java spring-data-jpa jmockit