当前位置: 首页 > 知识库问答 >
问题:

maven-surefire插件:2.22.1测试失败与NullPointerException

慕容劲
2023-03-14

我在使用maven成功编译测试时遇到问题。我正在使用EasyMock V4.0.2模拟服务。我应该提到的是,使用intellij IDE运行测试不会出现问题,下面是附带的代码。当我尝试将模拟注入模拟测试时,问题似乎就出现了。我已经看到了一些关于这个问题的帖子,但没有任何能解决我的问题。

我见过的最接近的一次是这次Spring启动未能执行目标组织。阿帕奇。专家插件:maven surefire插件:2.22.1:测试

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);
    }
}

这就是我从中得到的。我将感谢任何帮助,因为我不知道为什么肯定火没有注射我的模拟物

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

共有1个答案

丁善
2023-03-14

如果模拟为空,则表示它们未正确注入。

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

 类似资料:
  • 我正在使用SeleniumWebDriver(2.53.0版)的Java实现对web应用程序运行一些自动化测试。测试使用Cucumber的Java实现(版本1.2.3)以行为驱动测试格式编写。我使用Maven(3.3.9版)导入我的所有依赖项,并构建和运行测试。使用cucumber标签将测试分为不同类别。例如,我可以使用以下命令从命令行运行一类标有@JohnnyBravo的测试: 在做了一些研究后

  • 它是可以配置surefire插件只运行一些测试并行和其他顺序? 也可以使用surefireforkCount来运行声明为jUnit Suite的并行测试吗?

  • 我正在使用Maven构建我的项目。我目前将测试分为不同的层次结构: 单元测试- 这里是我的部分: <代码> 我尝试了,它运行所有的测试——单元测试、集成测试和外部测试。但是,对于默认测试套件,我只想运行单元测试。 我如何在Maven中实现这一点? 裁判:

  • 在Ubuntu服务器18.04上,我创建了一个框架Maven项目,如下所示,我只是想编译它。 运行mvn编译可以。但运行mvn测试失败,出现错误 [错误]无法执行目标组织。阿帕奇。专家插件:maven surefire插件:2.20.1:project my app上的测试(默认测试):目标组织的执行默认测试。阿帕奇。专家插件:maven surefire插件:2.20.1:测试失败:NullPo

  • 我有一个用TestNG编写的大型测试套件,需要几个小时才能完成。 我想让maven/surefire创建一个新套件,它是第一个套件的副本,但只包含失败的测试,这个套件应该运行得更快。 有可能创建这样一个套件吗? 作为回退,如果有这样的报告,我可以从一个易于解析的测试报告中自己创建它。 非常感谢。