我在用maven成功编译测试时遇到了问题。我正在使用EasyMock v4.0.2模拟一个服务。我应该提到在intellij IDE下运行测试没有问题,下面是附加的代码。当我试图将模拟注入我的模拟测试时,问题似乎就出现了。我已经看过几篇关于这个问题的帖子,但都没有解决我的问题。
我见过的最接近的是这个Spring Boot Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test
public class EasyMockExtension implements TestInstancePostProcessor {
@Override
public void postProcessTestInstance(Object testInstance, ExtensionContext extensionContext) throws Exception {
EasyMockSupport.injectMocks(testInstance);
}
}@ExtendWith(EasyMockExtension.class)
public class TestUserService extends EasyMockSupport {
@TestSubject
private UserService userService = new UserService();
@Mock
private UserRepository userRepository;
@Mock
private PasswordEncoder passwordEncoder;
@Mock
private MessengerRoleRepository roleRepository;
@Mock
private AuthenticationManager authenticationManager;
@Mock
private JwtTokenProvider jwtTokenProvider;
@Test
public void testAuthenticateUser(){
String username = "username";
String password = "password";
String token = UUID.randomUUID().toString();
User user = TestUserHelper.createUserWithRoles(username, password);
Collection<String> roles = user.getRoles().stream().map(MessengerRole::getRoleName).collect(Collectors.toList());
EasyMock.expect(authenticationManager.authenticate(EasyMock.anyObject(UsernamePasswordAuthenticationToken.class)))
.andReturn(EasyMock.anyObject(Authentication.class));
EasyMock.expect(userRepository.findByUsername(username)).andReturn(Optional.of(user));
EasyMock.expect(jwtTokenProvider.createToken(EasyMock.anyString(), EasyMock.anyObject(Collection.class))).andReturn(token);
replayAll();
Map<String, Object> authenticatedUser = userService.authenticateUser(username, password);
Assertions.assertTrue(MapUtils.isNotEmpty(authenticatedUser));
Assertions.assertSame(authenticatedUser.get("token"), token);
Assertions.assertTrue(((Collection<String>)authenticatedUser.get("roles")).containsAll(roles));
Assertions.assertTrue(roles.containsAll((Collection<String>)authenticatedUser.get("roles")));
verifyAll();
}
@Test
public void testAddFriendUsernameSuccess(){
long userId = 10L;
String username = "testUser2";
User user = TestUserHelper.createUser();
User friend = EasyMock.createMock(User.class);
Optional<User> optionalUser = Optional.of(user);
Optional<User> optionalFriend = Optional.of(friend);
EasyMock.expect(userRepository.findById(userId)).andReturn(optionalUser);
EasyMock.expect(userRepository.findByUsername(username)).andReturn(optionalFriend);
EasyMock.replay(userRepository, friend);
User returnedUser = userService.addFriend(userId, username);
Assertions.assertNotNull(returnedUser);
Assertions.assertSame(returnedUser, user);
Assertions.assertTrue(returnedUser.getFriends().contains(friend));
EasyMock.verify(userRepository, friend);
}
}这就是我从中得到的。我非常感谢大家在这方面的帮助,因为我不确定为什么surefire没有注入我的mock
java.lang.NullPointerException
at com.messenger.service.TestUserService.testAuthenticateUser(TestUserService.java)
[ERROR] com.messenger.service.TestUserService.testAddFriendUserNotFound() Time elapsed: 0 s <<< FAILURE!
java.lang.NullPointerException
at com.messenger.service.TestUserService.testAddFriendUserNotFound(TestUserService.java)
[ERROR] com.messenger.service.TestUserService.testAddFriendUsernameNotFound() Time elapsed: 0 s <<< FAILURE!
java.lang.NullPointerException
at com.messenger.service.TestUserService.testAddFriendUsernameNotFound(TestUserService.java)
[ERROR] com.messenger.service.TestUserService.testAddFriendUsernameSuccess() Time elapsed: 0.191 s <<< FAILURE!
java.lang.NullPointerException
at com.messenger.service.TestUserService.testAddFriendUsernameSuccess(TestUserService.java)
[ERROR] com.messenger.service.TestUserService.testAuthenticateUserUnableToFindUser() Time elapsed: 0.001 s <<< FAILURE!
java.lang.NullPointerException发布于 2019-02-24 10:25:51
如果mock为null,则意味着它们没有正确注入。
EasyMockExtension是从哪里来的?它不是来自EasyMock本身,因为JUnit 5还不受支持。但很乐意接受捐款。
https://stackoverflow.com/questions/54797685
复制相似问题