Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确使用spring启动测试?_Java_Spring_Spring Boot_Spring Test - Fatal编程技术网

Java 如何正确使用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

我真的不明白如何正确使用Spring中的测试。我真的需要对整个Spring配置执行完全初始化才能运行测试吗

我有一个最终的集成测试,一个正常的控制器调用,并检查它的响应。我必须这样做:

@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=)感谢您的添加!谢谢你的加入!