Есть ли новый подход к Spring AOP и mockito? - PullRequest
0 голосов
/ 10 октября 2019

Мне удалось решить проблему с сервисами Spring-boot aop и mocking test, используя подход, подробно описанный в Spring AOP Aspect, не работающий с использованием Mockito . Этому потоку более 6 лет.

Существуют ли какие-либо более новые подходы?

РЕДАКТИРОВАТЬ добавив больше деталей из моей конкретной реализации.

Контроллер:

@RestController
public class EndpointController {

    private EndpointService endpointService;

    @Autowired    
    public EndpointController(EndpointService endpointService) {
        this.endpointService = endpointService;
    }

    @PostMapping(path = "/endpoint", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    private @ResponseBody EndpointResponse doSomething(//... //, @RequestBody SomeObject someObject) throws Exception {
        return endpointService.doSomething(someObject);
    }
}

В моем тестовом классе у меня есть:

@RunWith(SpringRunner.class)
public class EndpointControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void shouldBeSuccessfulAccessingTheEndpoint() throws Exception {
        SomeObject someObject = new SomeObject(// values //);

        ObjectMapper mapper = new ObjectMapper();
        String payload = mapper.writeValueAsString(someObject);

        mockMvc.perform(post("/endpoint").contentType(MediaType.APPLICTION_JSON).content(payload)).andExpect(status().isOK));
    }
}

Сбой и выдает исключение NullPointerException. При отладке endpointService всегда равен нулю.

Есть идеи?

1 Ответ

1 голос
/ 10 октября 2019

Теперь вы можете использовать аннотацию @MockBean. Это своего рода завернутый мокито в весенних тестах.

@RunWith(SpringRunner.class)
public class ExampleTests {

 @MockBean
 private ExampleService service;

 @Autowired
 private UserOfService userOfService;

 @Test
 public void testUserOfService() {
     given(this.service.greet()).willReturn("Hello");
     String actual = this.userOfService.makeUse();
     assertEquals("Was: Hello", actual);
 }

 @Configuration
 @Import(UserOfService.class) // A @Component injected with ExampleService
 static class Config {
 }

}

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/mock/mockito/MockBean.html

...