7

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

  1. LocalTests - 在进程中运行(不需要服务器),直接调用我的 Web 层方法(在本例中为球衣)。
  2. HttpTests - 模拟客户端并通过 http 请求调用我的 web 层,需要启动并运行 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。但我看不出这门课有什么特别之处,就是一颗普通的春豆。

提前致谢!

4

3 回答 3

5

出现问题是因为Spring 上下文在我的一个侦听器之前加载,该侦听器在web.xml. Spring正在初始化一些使用非 Spring 类的 bean,这些类使用我自己的侦听器进行初始化。为了解决这个问题,我应该确保我的监听器首先运行。

于 2012-07-22T19:43:40.293 回答
0

对我来说,添加 VM 选项有效

将此添加到该测试用例的 VM 选项中:-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl -Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache .xerces.internal.jaxp.SAXParserFactoryImpl

于 2019-09-06T10:20:27.060 回答
0

除了上面提到的答案。您还应该寻找“引起”以查看是否存在任何依赖关系解析问题。例如,如果您的测试类是 MyService.java 并且它使用依赖项 MyRepository.java。然后,您应该确保所有此类依赖项在您的测试类中都是 Mocked 或 Autowired。

于 2020-09-30T10:54:07.760 回答