Изменить JUnit на TestNG, NullPointerException - PullRequest
1 голос
/ 29 января 2020

Я пытаюсь изменить структуру тестирования в моем проекте с JUnit на TestNG. Этот код, этот тестовый контроллер, работает правильно:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {DependencyReportController.class, DependencyReportControllerTest.SecurityPermitAllConfig.class})
@WebMvcTest(controllers = DependencyReportController.class)

public class DependencyReportControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private DependencyDifferenceService differenceService;

    @Before
    public void before() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void test() throws Exception {
        ServiceDependenciesReport report = new ServiceDependenciesReport();
        report.setElapsed("elapsed");
        report.setSuccess(true);

        List<ByService> byServices = new ArrayList<>();
        byServices.add(new ByService("service1", new ArrayList<>()));
        byServices.add(new ByService("service2", new ArrayList<>()));
        byServices.add(new ByService("service3", new ArrayList<>()));

        report.setByServices(byServices);
        when(differenceService.getAllDiffs()).thenReturn(report);

        this.mockMvc.perform(get("dependencies/difference")).andExpect(status().isOk())
            .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON_UTF8_VALUE))
            .andExpect(jsonPath("$.success", is(true)))
            .andExpect(jsonPath("$.byServices", hasSize(1)))
            .andExpect(jsonPath("$.byServices[0].serviceName", is("service1")))
    }

    @Configuration
    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().permitAll()
                .and().csrf().disable();
        }
    }    
}

Как я знаю, в testNg я должен расширить свой тестовый класс с AbstractTestNGSpringContextTest и удалить строку с помощью @ RunWith (SpringRunner.class) :

    @ContextConfiguration(classes = {DependencyReportController.class, DependencyReportControllerTest.SecurityPermitAllConfig.class})
    @WebMvcTest(controllers = DependencyReportController.class)

        public class DependencyReportControllerTest extends AbstractTestNGSpringContextTest {
            @Autowired
            private MockMvc mockMvc;

            @MockBean
            private DependencyDifferenceService differenceService;

            @BeforeTest
            public void before() {
                MockitoAnnotations.initMocks(this);
            }
...
...

Но есть NPE:

java .lang.NullPointerException в report.controller.DependencyReportControllerTest .test (DependencyReportControllerTest. java: 61) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Ompl. . java: 43) в java .lang.reflect.Method.invoke (Метод. java: 498) в org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper. java: 133) в орг. testng.internal.MethodInvocationHelper $ 1.runTestMethod (MethodInvocationHelper. java: 239) в org.springframework.test.context.testng.AbstractTestNGSpringContextTests.run (Ab stractTestNGSpringContextTests. java: 180) в org.testng.internal.MethodInvocationHelper.invokeHookable (MethodInvocationHelper. java: 251) в org.testng.internal.TestInvoker.invokeMethod (10) при тестировании в Ing. .internal.TestInvoker.invokeTestMethod (TestInvoker. java: 172) в org.testng.internal.MethodRunner.runInSequence (MethodRunner. java: 46) в org.testng.internal.TestInvoker $ MethodInvocationAgent.inker 1033 *: 804) в org.testng.internal.TestInvoker.invokeTestMethods (TestInvoker. java: 145) в org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker. java: 146) в org.test. TestMethodWorker.run (TestMethodWorker. java: 128) в java .util.ArrayList.forEach (ArrayList. java: 1257) в org.testng.TestRunner.privateRun (TestRunner. java: 770) в org .testng.TestRunner.run (TestRunner. java: 591) в org.testng.SuiteRunner.runTest (SuiteRunner. java: 402) в org.testng.SuiteRunner.runSequentially (SuiteRunner. java: 396) в org.testng.SuiteRunn er.privateRun (SuiteRunner. java: 355) в org.testng.SuiteRunner.run (SuiteRunner. java: 304) в org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker. java: 53) в org.testng .SuiteRunnerWorker.run (SuiteRunnerWorker. java: 96) в org.testng.TestNG.runSuitesSequentially (TestNG. java: 1180) в org.testng.TestNG.runSuitesLocally (TestNG. java: 1102) testng.TestNG.runSuites (TestNG. java: 1032) в org.testng.TestNG.run (TestNG. java: 1000) в org.testng.IDEARemoteTestNG.run (IDEARemoteTestNG. java: 73) в орг. .testng.RemoteTestNGStarter.main (RemoteTestNGStarter. java: 123)

Что я делаю не так?

1 Ответ

2 голосов
/ 29 января 2020

добавить аннотацию @TestExecutionListeners(MockitoTestExecutionListener.class)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...