spring - 带有 Spring 的 Junit - TestContextManager [错误] 在允许 TestExecutionListener 时捕获异常

标签 spring tomcat maven junit integration-testing

在我的 Spring-Maven--Hibernate-Mysql runnint on Tomcat 网络应用程序中,我使用 2 种不同的 Junit 类别运行 2 种类型的 Junit 集成测试:

  1. LocalTests - 在进程中运行(不需要服务器),直接调用我的网络层方法(在本例中为 Jersey )。
  2. HttpTests - 模拟客户端并通过 http 请求调用我的网络层,需要启动并运行 tomcat。

在我的每个测试类之上:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:testApplicationContext.xml" })

我的测试套件看起来像这样(这是 2 个中的一个,每个类别都有一个):

@RunWith(Categories.class)
@IncludeCategory(HttpTest.class)
@SuiteClasses({ ...All My Test Classes... })
public class HttpSuiteITCase {

    // Excluded: NotificationTests, ImageHttpTests

    /**
     * Run once before any of the test methods.
     */
    @BeforeClass
    public static void setTestsConfigurations() {
    TestConfiguration.setup(false);
    }

我的 testApplicationContext 实际上是空的,它只包含组件扫描:

<context:component-scan base-package="com.company.app" />

当我运行我的本地测试时,它一切正常,但当我调用 mt HTTP 测试时它崩溃了:

2012-07-22 17:56:13 DefaultListableBeanFactory [INFO] Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@2598a35d: defining beans [httpBrandManagerTestsProxy,httpClubTestsProxy,<HERE THERE'S A BUNCH OF SPRING BEANS>,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,contextApplicationContextProvider,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchy
2012-07-22 17:56:13 TestContextManager [ERROR] Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@29565e9d] to prepare test instance [integrationTests.http.tests.UserLoginDataHttpTests@480d41f3]
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)

我试了很多东西都不管用:( 我的 testApplicationContext 在 test/resources 文件夹下。

我注意到异常标记了一个特定的类:UserLoginDataHttpTests。 但是我看不出这个类有什么特别之处,就是一个普通的spring bean。

提前致谢!

最佳答案

问题的发生是因为 Spring context 在我的一个监听器之前加载,它在 web.xml 中定义。 Spring 正在初始化一些使用非 spring 类的 bean,这些类使用我自己的监听器进行初始化。要解决这个问题,我应该确保我的监听器先运行。

关于spring - 带有 Spring 的 Junit - TestContextManager [错误] 在允许 TestExecutionListener 时捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601612/

相关文章:

java - 如何向 XML DOM 对象添加命名空间前缀?

spring - 如何从 Spring Controller 返回未找到状态

spring - Tomcat 在 Spring Boot 应用程序中挂起

java - Maven复制资源

java - 如何更新 gwt-maven-plugin 原型(prototype)?

java - 带有 ISO 参数的 DateTimeFormat 无法正确解析时区

java - SOA环境下webapp的实时数据管理(远程后端)

java - 在 JSP 中将对象作为变量传递

java - 工厂方法 'dataSource' 在启动时抛出异常

java - 如何使用maven在eclipse kepler中生成querydsl源代码