Я хотел бы проверить конечную точку отдыха в BookRestController
.Я пишу один тест с @WebMvcTest
.
@RunWith(SpringRunner.class)
@WebMvcTest(BookRestController.class)
public class BookRestControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private CategoryService categoryService;
private ObjectMapper objectMapper = new ObjectMapper();
@Test
public void should_create_new_category_when_try_to_update() throws Exception {
given(categoryService.getCategoryById(20L)).willReturn(null);
Category category = new Category("Fantastyka");
ResultActions resultActions = mockMvc.perform(put("/api/category/10")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(category)));
resultActions.andExpect(status().isNoContent());
}
}
. В пакете репозитория у меня есть 4 репозитория, но в моей конечной точке тестирования я использую только один из них.
И это мой метод из BookRestController
@RestController
public class BookRestController {
@Autowired
private CategoryService categoryService;
@RequestMapping(value = "/api/category/{id}", method = RequestMethod.PUT)
public ResponseEntity<Category> updateCategory(@PathVariable Long id, @RequestBody Category category){
return ResponseEntity
.status(HttpStatus.NO_CONTENT)
.body(categoryService.updateCategory(id, category));
}
}
Теперь, когда я запускаю тест, я получаю ошибку
Вызвано: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания бина с именем 'demoApplication': Неудовлетворенная зависимость, выраженная через параметр конструктора 0;вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа com.sda.spring.demo.repository.BookRepository: ожидается как минимум 1 компонент, который считается кандидатом на автопровод.Аннотации зависимостей: {}
Почему?Я не использую BookRepository
в моем тесте.Как я могу это исправить?
Полный журнал:
java.lang.IllegalStateException: Не удалось загрузить ApplicationContext
в org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext (DefaultCacheAwareContextLoaderDelegate.java:125) в org.springframework.test.context.support.DefaultTestContext.getApplicationContext (DefaultTestConte.LockTockTackThereTockToTecFoTecToFotToGTTTF )ToFDTF) .Default.0) в org.springframework.test.context.TestContextManager.prepareTestInstance (TestContextManager.java:246) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest (SpringJRuner4)..context.junit4.SpringJUnit4ClassRunner.methodBlock (SpringJUnit4ClassRunner.java:291) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild.(SpringJUnit4ClassRunner.java:97) в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) в org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) в org.junit.unners.ParentRunner.runChildren (ParentRunner.java:288) по адресу org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) по адресу org.junit.runners.ParentRunner $ 2.оценке (ParentRunner.java:2pring или другом) или.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate (RunBeforeTestClassCallbacks.java:61) в org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:70) в org.junit.runners.ParentRunner.run (ParentRunner.java:363f) для org.spr,intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs (IdeaTestRunner.java:47) в com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart (JUnittll.inteij.jtij.jtj)junit.вложенное исключениеis org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа com.sda.spring.demo.repository.BookRepository: ожидается как минимум 1 компонент, который квалифицируется как кандидат для автоматической передачи.Аннотации зависимостей: {} at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray (ConstructorResolver.java:767) в org.springframework.beans.factory.support.ConstructorResolver.auverwstrug. Org. Org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor (AbstractAutowireCapableBeanFactory.java:1308) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1154) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:538) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:498) в org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory.java: 320) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318) в org.springframework.begetean199) в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:846) в org.springframework.context.support.AbstractApplicationContext.jpg.Abstraboot.SpringApplication.run (SpringApplication.java:316) в org.springframework.boot.test.context.SpringBootContextLoader.loadContext (SpringBootContextLoader.java: 127) в org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal (DefaultCacheAwareContextLoaderDelegate.java:99) в org.springframework.test.context.cache.DeflegeCateConware.OwareConteaderCacheбольше Вызывается: org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа com.sda.spring.demo.repository.BookRepository: ожидается как минимум 1 компонент, который считается кандидатом на автопровод.Аннотации зависимостей: {} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound (DefaultListableBeanFactory.java:1646) в org.springframework.beans.factory.Fory.LeGeFDFDFBspringframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency (DefaultListableBeanFactory.java:1166) в org.springframework.beans.factory.support.ConstructorResolver.resolveAresort.works.ConstructorResolver.createArgumentArray (ConstructorResolver.java:758) ... еще 43
Spring Boot: v2.1.0.RELEASE
РЕДАКТИРОВАТЬ: Работает.Я пропускаю @Autowire
BookRepository
в моем DemoApplication
... Я удалил этот код, и теперь он работает
@Autowired
private ApplicationContext applicationContext;
private BookRepository bookRepository;
private CategoryRepository categoryRepository;
@Autowired
public DemoApplication(BookRepository bookRepository, CategoryRepository categoryRepository) {
this.bookRepository = bookRepository;
this.categoryRepository = categoryRepository;
}