Как мне справиться с созданием макета для класса обслуживания и проведением теста?

Это становится сложно, когда он получает метод удалить один из моего контроллера ниже при попытке проверить

@RequestMapping(value="/remove", method=RequestMethod.POST)
public String remove(
        @ModelAttribute("id") String id, Model model
) {
    bookService.removeOne(Long.parseLong(id.substring(8)));
    List<Book> bookList = bookService.findAll();
    model.addAttribute("bookList", bookList);

    return "redirect:/book/bookList";
}

И мой тест начинается с ложных инъекций в моем методе до теста ниже

@Before
public void setUp() {
    bookService = createMock(BookService.class);

    ReflectionTestUtils.setField(bookController, "bookService", bookService);

    userRepository= createMock(UserRepository.class);
    ReflectionTestUtils.setField(bookController, "userRepository", userRepository);

    mockMvc = standaloneSetup(bookController)
            .setMessageConverters(new MappingJackson2HttpMessageConverter())
            .build();
}

И наконец тест, пытающийся удалить книгу, не заставляя ее писать. Как мне продолжить?

@Test
public void bookRemoveTest() throws Exception {
   securityService.autologin("admin", "admin");

    Book book = new Book();
    book.setId(1L);

    expect(bookService.removeOne(anyObject( class));).andReturn(book);

    replay(bookService);

    MvcResult result = mockMvc
            .perform(post("/book/remove")
                    .accept(MediaType.TEXT_HTML)
                    .contentType(MediaType.TEXT_HTML))
            .andExpect(status().isOk())
            .andReturn();
    String controllerResult = result.getResponse().getContentAsString();
 }

Где что-то пошло не так и как я могу заставить этот тест работать?

java.lang.IllegalArgumentException: Either targetObject or targetClass for the field must be specified

    at org.springframework.util.Assert.isTrue(Assert.java:68)
    at org.springframework.test.util.ReflectionTestUtils.setField(ReflectionTestUtils.java:164)
    at org.springframework.test.util.ReflectionTestUtils.setField(ReflectionTestUtils.java:100)
    at org.springframework.test.util.ReflectionTestUtils.setField(ReflectionTestUtils.java:84)
    at com.admintest.controller.BookControllerTest.setUp1(BookControllerTest.java:62)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)

2 ответа

Я знаю, что это было задано некоторое время назад, но, возможно, это поможет кому-то:

У меня была эта ошибка, когда я забыл поставить @RunWith(MockitoJUnitRunner.class) поверх моего тестового класса. Если вы не укажете его, макеты не будут созданы, и вы попытаетесь вызвать ReflectionTestUtils для неинициализированного объекта.

Это выглядит хорошо для меня. Appart от того, что я ожидаю быть опечаткой в expect(bookService.removeOne(anyObject( class));).andReturn(book);,

Можете ли вы сказать нам, что не так? Что такое исключение и трассировка стека? Кроме того, согласны ли мы, что bookController создается путем вызова new BookController()?

Другие вопросы по тегам