当前位置: 首页 > 知识库问答 >
问题:

@WebMVCTest测试类中的NoSuchBeanDefinitionException

公孙宇
2023-03-14

我想在BookRestController中测试我的restendpoint。我用@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());

    }
}

这是我在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));
    }
}

现在,当我运行测试时,我得到一个错误

Spring Boot:v2.1.0.发行版

编辑:它起作用了。我怀念我的DemoApplication中的@autowireBookRepository...我删除了这段代码,现在它起作用了

@Autowired
    private ApplicationContext applicationContext;

    private BookRepository bookRepository;

    private CategoryRepository categoryRepository;

    @Autowired
    public DemoApplication(BookRepository bookRepository, CategoryRepository categoryRepository) {
        this.bookRepository = bookRepository;
        this.categoryRepository = categoryRepository;
    }

共有1个答案

连俊智
2023-03-14

您的主应用程序类将加载任何定义的bean或通过注释启用的功能。

例如@enableschedling@componentscan@import等。

都会在切片测试中加载。

 类似资料:
  • 将@service添加到控制器后,单元测试失败。该项目是Spring-boot V2.0.1版本。我花了很多时间想找到答案,但没有成功。在我添加@service注释之前,测试工作正常,并且我的服务类在其中有一个存储库。 堆栈跟踪: 2018-04-24 12:57:12.487警告940--[main]O.s.w.cs.GenericWebApplicationContext:上下文初始化过程中遇

  • 我有一个Spring Boot应用程序(1.5.10.release),其中包含一个主程序(SpringBootApplication)如下所示: 存储库如下所示: A和B它们本身是JPA注释类。整个应用程序包含对数据库的访问。 此外,我有这样一个服务: XService不是通过@autowire或其他方式使用的(只需要删除它): 因此,我尝试运行AControllerTest,得到以下错误: j

  • 在下面的测试类中,我不希望@EnableWebSecurity注释类被Spring上下文捕获: 我正在运行Spring BootV2.2.2版本。 下面是安全配置类:

  • 我已经按照这里描述的“测试Spring MVC切片”一节为Spring MVC控制器编写了一个测试类。类如下所示: 当我运行它时,我得到了以下错误: 有人能解释为什么@webmvctest注释对我不起作用吗?

  • 在新的Spring Boot 1.4 < code > @ WebMvcTest 中,我只有很少的工作代码来以不同的方式设置< code>MockMVc。我理解独立安装的方法。我想知道的是通过< code > WebApplicationContext 和通过自动绑定< code>MockMvc来设置< code>MockMvc的区别。 代码片段1:通过WebApplicationContext设

  • 所以我是新来的salesforce,我完成了我的培训,现在我正在做一个项目。但是在我的项目中,我偶然发现了一个测试类,我没有找到编写它的方法,所以如果有人能帮我找到一种方法,我将不胜感激。这是代码: 此代码是一个触发器,当opportunity stage更改为“CloturéGagné”时,它会创建一个新的服务合同记录,其中包含从opportunity line items复制的合同行项目,在法