如何在 Spring Boot 测试中插入高级数据?
我正在 Spring Boot 中编写测试代码。
但是,我的测试代码没有使用 @Before 方法保存数据。
如果我请求“/v1/stay/”,它会返回空数组...
请您解释一下我的代码有什么问题吗?
这是我的测试代码。
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class StayControllerTest {
@MockBean
private StayService stayService;
@Autowired
private MockMvc mockMvc;
// givenStay method is the method generating dummy data
@Before
public void before() {
stayService.save(givenStay1());
stayService.save(givenStay2());
stayService.save(givenStay3());
stayService.save(givenStay4());
stayService.save(givenStay5());
}
@Test
@Transactional
void showStayList() throws Exception {
List<StayReq> original = new ArrayList<>();
original.add(givenStay1());
original.add(givenStay2());
original.add(givenStay3());
original.add(givenStay4());
original.add(givenStay5());
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/v1/stay")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(print())
.andReturn();
System.out.println(result.getResponse());
}
}
下面的代码块是我的 StayController 和 StayService
@RestController
@ApiV1
@RequiredArgsConstructor
public class StayController {
private final StayService stayService;
private final ApiService apiService;
@GetMapping("/stay")
public ResponseEntity<Response> stayList() {
return apiService.okResponse(stayService.getList());
}
}
@Service
@RequiredArgsConstructor
public class StayService {
private final StayRepository stayRepository;
private final RoomRepository roomRepository;
public List<StayRes> getList() {
return stayRepository.findAll().stream().map(StayRes::new).collect(Collectors.toList());
}
@Transactional
public void save(StayReq stayReq) {
stayRepository.save(stayReq.toEntity());
}
}
I'm making test code in spring boot.
But, my test code doesn't save the data using @Before method.
If i request to '/v1/stay/, it return empty array...
Please can you explain what is wrong with my code?
Here is my test code.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class StayControllerTest {
@MockBean
private StayService stayService;
@Autowired
private MockMvc mockMvc;
// givenStay method is the method generating dummy data
@Before
public void before() {
stayService.save(givenStay1());
stayService.save(givenStay2());
stayService.save(givenStay3());
stayService.save(givenStay4());
stayService.save(givenStay5());
}
@Test
@Transactional
void showStayList() throws Exception {
List<StayReq> original = new ArrayList<>();
original.add(givenStay1());
original.add(givenStay2());
original.add(givenStay3());
original.add(givenStay4());
original.add(givenStay5());
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/v1/stay")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(print())
.andReturn();
System.out.println(result.getResponse());
}
}
And below code blocks are my StayController and StayService
@RestController
@ApiV1
@RequiredArgsConstructor
public class StayController {
private final StayService stayService;
private final ApiService apiService;
@GetMapping("/stay")
public ResponseEntity<Response> stayList() {
return apiService.okResponse(stayService.getList());
}
}
@Service
@RequiredArgsConstructor
public class StayService {
private final StayRepository stayRepository;
private final RoomRepository roomRepository;
public List<StayRes> getList() {
return stayRepository.findAll().stream().map(StayRes::new).collect(Collectors.toList());
}
@Transactional
public void save(StayReq stayReq) {
stayRepository.save(stayReq.toEntity());
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您注入的是模拟服务,而不是“真正的”服务。如果您想使用“真实”服务 - 您需要将
@MockBean
注释替换为@Autowired
注释。或者 - 您可以在测试方法中配置模拟以返回一些预定义的数据。
You injected a mock, not a 'real' service. If you want to use a 'real' service - you need to replace
@MockBean
annotation with@Autowired
annotation.Or alternatively - you can configure mock in the test method to return some predefined data.