我知道有很多类似的问题,但似乎没有一个对我有帮助或使我对这个问题有所了解。我也是春季新手,所以这就是为什么我可能会遇到这样的初学者问题。
问题:
我有一个(目前非常基础的)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));
}
}
答案 0 :(得分:0)
您很可能在测试中缺少@ContextConfiguration。 Spring单元测试运行器不知道有一个LocationServiceImpl。