【问题标题】:maven-surefire-plugin:2.22.1 test failing with NullPointerExceptionmaven-surefire-plugin:2.22.1 测试失败,出现 NullPointerException
【发布时间】:2019-07-14 19:30:01
【问题描述】:

我在使用 maven 成功编译测试时遇到问题。我正在使用 EasyMock v 4.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 没有注入我的模拟

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

【问题讨论】:

  • EasyMockExtension 来自哪里? 207行是哪一行? (发生 NPE 的地方)
  • 所有注入的mock对象都是带有NullPointerException的对象

标签: spring easymock maven-surefire-plugin


【解决方案1】:

如果 mocks 为 null,则表示它们未正确注入。

EasyMockExtension 来自哪里?它不是来自 EasyMock 本身,因为尚不支持 JUnit 5。但很乐意接受捐款。

【讨论】:

  • EasyMockExtension 是一个继承类以支持 Junit 5。我将更新问题以包含该类
猜你喜欢
  • 2019-08-10
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多