Java 如何正确使用spring启动测试?
我真的不明白如何正确使用Spring中的测试。我真的需要对整个Spring配置执行完全初始化才能运行测试吗 我有一个最终的集成测试,一个正常的控制器调用,并检查它的响应。我必须这样做:Java 如何正确使用spring启动测试?,java,spring,spring-boot,spring-test,Java,Spring,Spring Boot,Spring Test,我真的不明白如何正确使用Spring中的测试。我真的需要对整个Spring配置执行完全初始化才能运行测试吗 我有一个最终的集成测试,一个正常的控制器调用,并检查它的响应。我必须这样做: @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment=SpringBootTest.webEnvironment.RANDOM\u端口) 公共类RestControllerTest{ @自动连线 HomeRestController HomeRes
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=SpringBootTest.webEnvironment.RANDOM\u端口)
公共类RestControllerTest{
@自动连线
HomeRestController HomeRestController;
@试验
@重复(值=15)
public void test()引发异常{
RequestSearch RequestSearch=新建RequestSearch();
HttpServletResponse HttpServletResponse=mock(HttpServletResponse.class);
requestSearch.setMonth(7);
requestSearch.setYear(2018年);
requestSearch.setGbNumber(5010);
setPayTime(新的双精度(32));
setScanTime(新的Double(2.7));
setWaitTime(新的双精度(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)
公共类RestControllerMockTest{
@自动连线
私有MockMvc;
@试验
public void test()引发异常{
RequestSearch RequestSearch=新建RequestSearch();
requestSearch.setMonth(7);
requestSearch.setYear(2018年);
requestSearch.setGbNumber(5010);
setPayTime(新的双精度(32));
setScanTime(新的Double(2.7));
setWaitTime(新的双精度(35));
perform(post(HomeRestController.postrl,requestSearch).accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
}
}
但此测试不起作用,这是引发的异常:
原因:org.springframework.beans.factory.unsatifiedpendencyException:创建在类路径资源[ru/denisa/configuration/SQLServerDatabaseConfiguration.class]中定义的名为“entityManagerFactory”的bean时出错:
异常(SQLServerDatabaseConfiguration
)中提到的配置类是一个用@configuration
注释的配置类
如果我在测试中添加以下注释:
@SpringBootTest(webEnvironment=SpringBootTest.webEnvironment.RANDOM\u端口)
然后我得到以下异常:
java.lang.IllegalStateException:配置错误:找到测试类[ru.denisa.test.service.rest.restcontrollermStockTest]的多个@BootstrapWith声明:
如何做对?谢谢 试试这个
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MainApp.class)
@EnableWebMvc
@AutoConfigureMockMvc
public class RestControllerMockTest {
@Autowired
HomeRestController homeRestController;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
}
试试这个
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MainApp.class)
@EnableWebMvc
@AutoConfigureMockMvc
public class RestControllerMockTest {
@Autowired
HomeRestController homeRestController;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
}
稍微简单一点的代码:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HomeRestController.class)
public class RestControllerMockTest {
}
另外,要禁用安全性,只需更改
@WebMvcTest(controllers=HomeRestController.class,secure=false)
简单一点的代码:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HomeRestController.class)
public class RestControllerMockTest {
}
另外,要禁用安全性,只需在pom.xml中更改
@WebMvcTest(controllers=HomeRestController.class,secure=false)
,您是否为测试范围包含了com.h2数据库
依赖项?@WebMvcTest
应仅构建包含最小web配置的上下文,并且应使用@MockBean
模拟控制器的依赖项。主要问题是您正在配置Spring Boot应该配置的东西。为什么要手动配置Spring Boot可以配置(并自动排除)的EntityManagerFactory
(可能还有更多内容)。简短的回答是肯定的。长答案是肯定的,否则你认为所有的注入魔法将如何发生?在pom.xml中,你是否包含测试范围的com.h2数据库
依赖项?@WebMvcTest
应该只构建一个包含最小web配置的上下文,并且应该使用@MockBean
模拟控制器的依赖项。主要问题是您正在配置Spring Boot应该配置的东西。为什么要手动配置Spring Boot可以配置(并自动排除)的EntityManagerFactory
(可能还有更多内容)。简短的回答是肯定的。长句回答是肯定的,否则你认为所有的注射魔法将如何发生?太多了!神奇的自动配置emockMVC=)太多了!神奇的AutoConfigureMockMvc=)感谢您的添加!谢谢你的加入!