java - 如何正确使用 Spring Boot 测试?
问题描述
我不太了解如何正确使用 Spring 中的测试。我真的需要对整个 Spring 配置执行完全初始化来运行测试吗?
我有一个最终的集成测试,一个正常的控制器调用,并检查它的响应。我必须这样做:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class RestControllerTest {
@Autowired
HomeRestController homeRestController;
@Test
@Repeat(value = 15)
public void test() throws Exception {
RequestSearch requestSearch = new RequestSearch();
HttpServletResponse httpServletResponse = mock(HttpServletResponse.class);
requestSearch.setMonth(7);
requestSearch.setYear(2018);
requestSearch.setGbNumber(5010);
requestSearch.setPayTime(new Double(32));
requestSearch.setScanTime(new Double(2.7));
requestSearch.setWaitTime(new Double(35));
ReportResponse reportResponse = homeRestController.find(requestSearch, httpServletResponse);
Assert.assertTrue(reportResponse.cashBoxPlans.size() == 1487);
Assert.assertTrue(reportResponse.getExcelPath().equals("ExceReport.xls"));
}
}
查看 Spring 文档后,我发现了一个完美的示例,并希望在测试中添加一个单独的类:
@RunWith(SpringRunner.class)
@WebMvcTest(HomeRestController.class)
public class RestControllerMockTest {
@Autowired
private MockMvc mvc;
@Test
public void test() throws Exception {
RequestSearch requestSearch = new RequestSearch();
requestSearch.setMonth(7);
requestSearch.setYear(2018);
requestSearch.setGbNumber(5010);
requestSearch.setPayTime(new Double(32));
requestSearch.setScanTime(new Double(2.7));
requestSearch.setWaitTime(new Double(35));
mvc.perform(post(HomeRestController.postUrl,requestSearch).accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
}
}
但是这个测试不起作用,这是被抛出的异常:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactory' defined in class path resource [ru/denisa/configuration/SQLServerDatabaseConfiguration.class]:
异常( SQLServerDatabaseConfiguration
)中提到的配置类是一个用 注释的配置类@Configuration
。
如果我在测试中添加以下注释:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
然后我得到以下异常:
java.lang.IllegalStateException: Configuration error: found multiple declarations of @BootstrapWith for test class [ru.denisa.test.service.rest.RestControllerMockTest]:
怎么做才对?谢谢!
解决方案
稍微简单一点的代码:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HomeRestController.class)
public class RestControllerMockTest {
}
PS。为了禁用安全性,只需更改 @WebMvcTest(controllers = HomeRestController.class, secure= false)
推荐阅读
- c++ - vkCmdCopyBuffer 对暂存缓冲区的传输没有影响
- r - R使用group_by中的pracma pkg中的movavg()和summarise()计算加权移动平均值?
- c - C - 如何初始化一个未知大小的二维数组
- pic - PIC的m touche电容感应模块问题
- angular - ngAfterViewInit 的单元测试?
- vb.net - 连接已经打开
- python - python脚本在x秒后运行,但是当插入tkinter代码时它只运行一次
- cloud-foundry - 您可以将 CLI 工具添加到 Cloud Foundry 应用程序吗?
- c++ - 关于从每个间隔中选择相同时间长度的间隔调度问题
- assembly - Windows x64 上的不同 asm 与 CS:APP x86-64 Linux 示例函数用于交换长