Как мне справиться с созданием макета для класса обслуживания и проведением теста?
Это становится сложно, когда он получает метод удалить один из моего контроллера ниже при попытке проверить
@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()
?