- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是将之前使用 Spring Boot 1.3 开发的 Spring Boot 应用程序迁移到最新的 Spring Boot 版本 1.4。该应用程序由几个 maven 模块组成,其中只有一个包含用 @SpringBootApplication
注释的类.
迁移的一部分是使用 @WebMvcTest
注释以有效地测试 Controller ,在这里我遇到了一个问题。
考虑 example application来自 Spring Boot github 页面。 @WebMvcTest
注释工作得很好,因为据我所知(在我做了几次测试之后),主包中有一个用 @SpringBootApplication
注释的类.请注意,我自己的 @WebMvcTest
遵循与上面示例中所示相同的概念。测试。
我看到的唯一区别是,在我的应用程序中, Controller 类位于单独的 maven 模块中(没有 @SpringBootApplication
注释类),但带有 @Configuration 和 SpringBootConfiguration
配置。如果我不使用 @SpringBootApplication
注释任何类我在测试 Controller 时总是得到一个断言。我的断言与上面示例中的 SampleTestApplication 类修改为只有 @EnableAutoConfiguration
时相同。和 @SpringBootConfiguration
注释(@SpringBootApplication
不存在):
getVehicleWhenRequestingTextShouldReturnMakeAndModel(sample.test.web.UserVehicleControllerTests) Time elapsed: 0.013 sec <<< FAILURE!
java.lang.AssertionError: Status expected:<200> but was:<404>
at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:54)
at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:81)
at org.springframework.test.web.servlet.result.StatusResultMatchers$10.match(StatusResultMatchers.java:664)
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171)
at sample.test.web.UserVehicleControllerTests.getVehicleWhenRequestingTextShouldReturnMakeAndModel(UserVehicleControllerTests.java:68)
最佳答案
简短的回答:我相信是的。
长答案:
我相信@WebMvcTest
需要从 WebMvcTest
开始查找 SpringBootApplication 配置的唯一目的是帮助简化测试(SpringBootApplication
宁愿尝试加载整个世界)。
在您的特定情况下,由于您的非测试包中没有任何内容,我相信它也会找到带有 @ScanPackages
注释的 SampleTestConfiguration并以某种方式加载每个bean。
在 src/main/java/sample/test
中添加以下内容
@SpringBootApplication
public class SampleTestConfiguration {
}
并将您的测试更改为:
@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
public class MyControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private MyService ms;
@Autowired
private ApplicationContext context;
@Test
public void getDataAndExpectOkStatus() throws Exception {
given(ms.execute("1")).willReturn(false);
mvc.perform(get("/1/data").accept(MediaType.APPLICATION_JSON_VALUE)).andExpect(status().isOk()).andExpect(content().string("false"));
}
@Test
public void testMyControllerInAppCtx() {
assertThat(context.getBean(MyController.class), is(not(nullValue())));
}
@Test
public void testNoMyAnotherControllerInAppCtx() {
try {
context.getBean(MyAnotherController.class);
fail("Bean exists");
} catch (BeansException e) {
// ok
}
}
}
@WebMvcTest
找到
SpringBootApplication
,然后加载
bean 数量有限 (见
documentation):
@WebMvcTest will auto-configure the Spring MVC infrastructure andlimit scanned beans to @Controller, @ControllerAdvice, @JsonComponent,Filter, WebMvcConfigurer and HandlerMethodArgumentResolver. Regular@Component beans will not be scanned when using this annotation.
WebMvcTest
需要
SpringBootApplication
:
WebMvcTest
继承了很多AutoConfiguration,所以需要SpringBoot来加载。然后它会禁用许多其他 AutoConfiguration 并且您的 Controller 变得易于测试。
WebMvcTest
是当你有一个 SpringBootApplication
并且您希望通过禁用除 Controller 以外的所有 bean 来简化测试。如果您没有 SpringBootApplication,那么为什么要使用 WebMvcTest 呢?
关于spring-boot - @WebMvcTest 是否需要 @SpringBootApplication 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38890944/
我在阻止 Spring Boot 自动配置某些类(在本例中:SolrAutoConfiguration)时遇到了一些困难。为了说明这一点,我设置了一个简化得多的示例: https://github.c
我在阻止 Spring Boot 自动配置某些类时遇到了一些困难(在本例中:SolrAutoConfiguration)。为了说明,我设置了一个大大简化的示例: https://github.com/
根据我的理解,使用@SpringBootApplication相当于拥有@EnableAutoConfiguration和@ComponentScan。由于这个原因,我不明白为什么Spring找不到我
静态文件位于: src/main/resources/static/ js CSS 图片 等.. 无论我做什么,文件都不会被拾取。我试过 addResourceHandlers 但似乎没有任何效果。
我写了一个基于 Spring Boot 的应用程序,但是当我将所有类(模型、用 @restController 注释的 Controller )放在 SpringBoot 存在的同一个包中时,它就可以
我在 nexus 上发布了一个具有包 ID 的公共(public)库 x.xx.common 包含常见Feign客户端代理接口(interface)子包 使用这个库的项目有包 id。 x.xx.acc
我正在努力在简单的 SpringBootApplication 中加载配置。当我尝试打印配置类中的变量时,它们始终为空。 最初,我在 WatchApplication.java 中有可配置变量。然而,
我的 Spring Boot 配置有问题。 我使用 https://start.spring.io/ 创建了基础 Spring Boot 项目 我有一个问题,配置仅适用于子目录中的类: 我尝试过注释@
使用@WebMvcTest 将通过查找@SpringBootConfiguration 类(例如@SpringBootApplication)自动配置所有web 层bean。 如果配置类在不同的包里,
我有一个带有 Autowiring 功能的简单 Spring 应用程序 AppMain,我不想在其中使用任何显式 XML 配置。 在我的 TaskScheduler 组件中,我想将 ThreadPoo
没有@SpringBootApplication,Spring boot应用程序如何工作? 在我们的项目中,我们使用了@Component、@Configuration以及带有@Bean注解的bean
我正在尝试将 spring、非启动应用程序迁移到启动应用程序。当前构建了一个 war 文件。正在关注these说明,我正在逐步完成迁移步骤。 我发现 @SpringBootApplication 注释
我对 SpringBoot 还很陌生。我创建了一个带有服务类的示例应用程序。 下面是我的SpringBootApplication类 @SpringBootApplication public cla
my earlier question 的答案说我应该使用 @SpringBootApplication(scanBasePackages = {"path.to.your.project.root"
我有一个 SpringBootApplication,我想从我的属性文件中读取一个值。 我的@SpringBootApplication类是这样的: @SpringBootApplication @C
如何使用@SpringBootApplication注释从类运行代码。我想运行我的代码而不调用 Controller 并从终端而不是网络浏览器获取信息。我尝试在@SpringBootApplicati
我在 Spring Boot 初始化时遇到了问题。我在一个简单的 Spring Boot 项目中有这个结构。 com.project.name |----App.java (Annoted with
我对 STS 很陌生。我在stackoverflow中搜索了这个错误。我没有找到正确的匹配答案。 我可以在 STS 的 MavenDependencies 部分中看到该类,但无法在我的 java 类中
有没有办法在运行mvn spring-boot:run时指定运行哪个SpringBootApplication的主类? docs说我可以使用 mainClass 参数来指定要运行的主类。但我不确定如何
我试过 @JdbcTest关于以下项目结构。 . ├── pom.xml └── src ├── main │ ├── java │ │ └── com │
我是一名优秀的程序员,十分优秀!