【问题标题】:Can we use spring boot 1.4.1 testing framework with java 1.7?java 1.7可以用spring boot 1.4.1测试框架吗?
【发布时间】:2016-11-01 18:50:46
【问题描述】:

我在 java 1.7 上使用 spring boot 1.4.1。我有一个带有一个 get 端点“show”的示例控制器

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = SomeController.class)
public class SomeControllerTest {

    @Autowired
    MockMvc mockMvc;

    @Test
    public void showPage() throws Exception {
        mockMvc
                .perform(get("/show"))
                .andExpect(content().string(containsString("Some Result")));
    }

 }

以下是我尝试执行测试时遇到的错误。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mockMvcWebClientBuilder' defined in class path resource [org/springframework/boot/test/autoconfigure/web/servlet/MockMvcWebClientAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder]: Factory method 'mockMvcWebClientBuilder' threw exception; nested exception is java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=org/eclipse/jetty/websocket/api/Session, offset=6
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:599) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1128) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1023) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]

仔细观察发现原因是

   org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder]: Factory method 'mockMvcWebClientBuilder' threw exception; nested exception is java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=org/eclipse/jetty/websocket/api/Session, offset=6

谁能告诉我是否可以使用 java 1.7 进行测试?

【问题讨论】:

    标签: spring-boot spring-test-mvc


    【解决方案1】:

    Spring Boot 1.4.1 包括 Jetty 9.3 (see spring-boot-dependencies pom.xml)

    Their documentation 说 Jetty 9.3 需要 Java 8+。您应该通过重新定义 pom 中的属性来将其替换为 Jetty 9.2:

    <properties>
        <jetty.version>9.2.19.v20160908</jetty.version>
    </properties>
    

    这恰好是 Spring 的确切建议 (in their documentation):

    在 Maven 中使用 Jetty 9.2

    如果您使用的是 starters 和 parent,您只需添加 Jetty starter 并覆盖 jetty.version 属性:

    <properties>
        <jetty.version>9.2.17.v20160517</jetty.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
    </dependencies>
    

    【讨论】:

    • 感谢您的回复 Alex,出于好奇,是否可以使用 tomcat 代替 jetty ?
    • 当然。默认使用Tomcat,支持java 1.7。从技术上讲,如果您删除 spring-boot-starter-jetty 依赖项 + 不排除 tomcat,您将使用 tomcat(只要确保您没有其他码头依赖项。您还可以问另一个问题,发布您的 pom 并询问你怎么能用tomcat代替。我回答了一个码头解决方案,因为你的堆栈跟踪包含“org/eclipse/jetty/websocket/api/Session”
    猜你喜欢
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2023-03-06
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多