springboot @WebMvcTest测试controller报No qualifying bean of type 错误

西夏一品堂 发布于 2016/09/06 18:26
阅读 2K+
收藏 0

spring boot版本1.4.0

JDK1.8

代码如下:

package com.qq.spring.boot.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class BookDao {

	@Autowired
	private JdbcTemplate jdbcTemplate;
	
	public Integer addBook(String name){
		String sql = "insert into books (bname)values('"+name+"')";
		return jdbcTemplate.update(sql);
	}
}



package com.qq.spring.boot.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.qq.spring.boot.dao.BookDao;

@RestController
public class BookController {

	@Autowired
	private BookDao bookDao;
	
	@GetMapping("/book/home")
	public String home(){
		System.out.println("xxxxxxxxxxxxxhomexxxxxxxxxx");
		bookDao.addBook("home");
		return "bookhome";
	}
}



test代码如下:

package com.qq.spring.boot.controller;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = BookController.class)
public class BookControllerTest {

	 @Autowired
	 private MockMvc mvc;
	 
	@Test
	public void testHome() throws Exception {
		mvc.perform(MockMvcRequestBuilders.get("/book/home"))
        .andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().string("bookhome"));
	}
}



现在的问题是这样的,正常跑,可以访问/book/home url,没有问题
但是,跑junit test的时候,报错,
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.qq.spring.boot.dao.BookDao] found for dependency [com.qq.spring.boot.dao.BookDao]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我的spring容器中,是有BookDao这个bean的,为啥还是报错?













加载中
0
李三石
李三石
MockMvc mvc  不会加整个spring 框架的
西夏一品堂
西夏一品堂
回复 @李三石 : 好的。非常感谢,感谢提醒
李三石
李三石
回复 @西夏一品堂 : 你有两个选择,用MockMvc 只测试 controller 层代码,其他的都使用mock 方式提供 或者使用 @RunWith(SpringJUnit4ClassRunner.class) 加载整个spring 框架进行测试
西夏一品堂
西夏一品堂
怎么解决?
返回顶部
顶部