春季测试NoSuchBeanDefinitionException

时间:2019-11-07 11:08:55

标签: java spring

我知道有很多类似的问题,但似乎没有一个对我有帮助或使我对这个问题有所了解。我也是春季新手,所以这就是为什么我可能会遇到这样的初学者问题。

问题:

我有一个(目前非常基础的)spring应用程序,可以正常运行。但是测试不会成功,因为我遇到了NoSuchBeanDefinitionException并且我不知道为什么。我的测试是否应该找到应用程序通常无法找到的相同的bean?我以为注释可以解决这个问题?

我的应用程序非常基础:一种控制器,一种方法和一种服务一种方法。没有依赖,什么都没有。 https://start.spring.io/中最基本的设置。然后我有一个控制器:

@RestController
@RequestMapping("/location")
public class LocationController
{
    @Autowired
    LocationService locationService;

    @RequestMapping(value = "/get/{lat}/{lon}", method = RequestMethod.GET)
    public LocationData getLocationInfo(@PathVariable Double lat, @PathVariable Double lon) throws Exception {
        return locationService.getByCoordinates(lat, lon);
    }
}

对于服务我的界面(仅是普通public interface LocationService)和实现:

@Service
public class LocationServiceImpl implements LocationService {
    public LocationData getByCoordinates(Double lat, Double lon) {
        return new LocationData(lat, lon, "Test");
    }
}

我知道我可以注入一个模拟服务来使其工作,或者使用测试配置并在其中定义一些bean设置。但是开箱即用吗?为什么找不到我的服务?

编辑:

当然还有测试:

@RunWith(SpringRunner.class)
@WebMvcTest(LocationController.class)
public class LocationControllerTest {
    @Autowired
    private MockMvc mvc;

    @Test
    public void whenGetLocation_thenReturnJsonArray() throws Exception {
        String resp = mvc.perform(get("/location/get/1.00/2.00"))
           .andExpect(status().isOk())
           .andExpect(content().contentType(MediaType.APPLICATION_JSON));
    }
}

1 个答案:

答案 0 :(得分:0)

您很可能在测试中缺少@ContextConfiguration。 Spring单元测试运行器不知道有一个LocationServiceImpl。