我正在为我的springboot应用程序创建测试。应用程序通过get调用,在requestbody中传递我的“carrequest”
public class CarsRequest implements Serializable {
private String name;
private String plate ;
private String price;
}
它还给了我与数据相关的汽车规格
{
"name":"",
"plate":"",
"price":"",
"brand":"",
"kilometers":"",
"revisiondate":"",
"owner":""
}
我用mockito做了这个简单的测试,但我不明白为什么我的服务默认设置为null,这会抛出nullpointerexception中的所有内容
public class CarTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private CarService service;
@Autowired
ObjectMapper objectMapper;
@Test
public void TestOk() throws Exception{
CarsRequest carsRequest = new CarsRequest();
Car car = new Car();
List<Car> cars = new ArrayList<>();
//septum the fields of cars and add them to the list
cars.add(car);
Mockito.when(
service.getByPlate("bmw",
"TG23IO", "1500")).thenReturn(cars);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get(
"/garage/cars").accept(
MediaType.APPLICATION_JSON);
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
System.out.println(result.getResponse());
String expected = "{name:"bmw","plate":"TG23IO","price":"1500","brand":"POL","kilometers":"80000","revisiondate":"2016-03-15","owner":"JohnLocke"}";
JSONAssert.assertEquals(expected, result.getResponse()
.getContentAsString(), false);
}
}
下面我还添加了我的carservice
@Service
public class CarService {
@Autowired
CarRepository carRepository;
@Autowired
ObjectMapper objectMapper;
public List<Cars> getByContratto(String name, String plate, String price) throws JsonProcessingException {
//some code, extraction logic
return cars;
}
}
应用程序运行得很好,只是测试不起作用。作为一个测试写作的新手,我不知道我的carservice上的null是由于什么。如果需要的话,我也可以包括controller get和repository,但我认为它们没有帮助
3条答案
按热度按时间qco9c6ql1#
我相信你在测试控制器。因此,在测试类的顶部包含以下注解。
另外,我可以看到在测试代码中carservice被引用,而共享的服务代码包含documentservice。
xoshrz7s2#
尝试添加
@RunWith(SpringRunner.class)
去你的测试班。我怀疑你在使用
Junit 4
为了你的测试。在Junit 4
你需要加上@RunWith(SpringRunner.class)
在测试中,否则将忽略所有注解。更多信息请查看这里的文档。46.3 Testing Spring Boot Applications
是回答您问题的部分。不过,我建议您迁移到
Junit 5
如果可能的话。j8yoct9x3#
假设您只想测试您的控制器层(因为您使用的是mockmvc)并且您使用的是junit4(从您的代码中可以看到),那么您应该编写如下的测试用例
注意:在这个例子中,测试方法是不相关的,我添加这个只是为了说明。
如果有帮助,请告诉我们。