Java 在静态方法Junit中获取空指针
我有以下服务Java 在静态方法Junit中获取空指针,java,spring,unit-testing,junit4,Java,Spring,Unit Testing,Junit4,我有以下服务 public UserActivityLog save(UserActivityLog userActivityLog){ LOGGER.debug("User activity save called."); userActivityLog.setCreatedByUser(User.getUser().getUserId()); userActivityLog.setCreationTime(new Date()); return activit
public UserActivityLog save(UserActivityLog userActivityLog){
LOGGER.debug("User activity save called.");
userActivityLog.setCreatedByUser(User.getUser().getUserId());
userActivityLog.setCreationTime(new Date());
return activityLogRepository.save(userActivityLog);
}
我编写了下面的Junit来进行测试,但为用户获取空指针
@RunWith(MockitoJUnitRunner.class)
public class ActivityHistoryServiceTest {
@InjectMocks
private ActivityHistoryService activityHistoryService;
@Mock
private ActivityLogRepository activityLogRepository;
@Test
public void testSave() {
UserActivityLog userActivityLog = new UserActivityLog();
/* Called some setter methods to set value here*/
UserProfile profile = new UserProfile();
Mockito.when(User.getUser()).thenReturn(profile);
Assert.assertNotNull(activityLogRepository.save(userActivityLog));
}
}
用户类类似于
public class User {
private User(){}
public static UserProfile getUser(){
/*some logic*/
return userProfile;
}
}
请帮忙。提前感谢。静态方法在有用的时候很有用。用它们代替单身汉并不是一个很好的做法。您的代码可能会如下所示:
public class MyClass {
private final Logger logger;
private final UserProvider userProvider;
private final DateProvider dateProvider;
/** Constructor that sets all attributes */
public MyClass(...) {...}
public UserActivityLog save(UserActivityLog userActivityLog){
LOGGER.debug("User activity save called.");
userActivityLog.setCreatedByUser(userProvider.get().getUserId());
userActivityLog.setCreationTime(dateProvider.get());
return activityLogRepository.save(userActivityLog);
}
}
Provider
类非常简单。它们只有一个get()
方法返回所需类型的实例:
public class DateProvider {
public Date get() {
return new Date();
}
}
public class UserProvider {
public User get() {
...
}
}
通过此设置,您可以轻松模拟依赖项您需要PowerMock来模拟静态方法。 参考:
不能用Mockito模拟静态方法。您还可以为此使用PowerMock。