Spring JUnit 测试使用 TestContext.retrieveContextLoaderClass(TestContext .java:197) 获取 NullPointerExcept

Posted

技术标签:

【中文标题】Spring JUnit 测试使用 TestContext.retrieveContextLoaderClass(TestContext .java:197) 获取 NullPointerException【英文标题】:Spring JUnit test getting NullPointerException with TestContext.retrieveContextLoaderClass(TestContext .java:197) 【发布时间】:2011-06-02 14:45:56 【问题描述】:

使用 Helios、spring 3.0.5(TestContext 框架)和 JUnit 4.7。我收到一个初始化错误,表明它找不到 ContextConfiguration。我在后台运行 ProcMon 并确定它根本没有看。我尝试了 xml 文件的逻辑位置,但无济于事。我不清楚我做错了什么。代码如下:

package com.hwcs.veri.agg.dao;

import static org.junit.Assert.assertEquals;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import com.hwcs.veri.jpa.License;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations =  "/JpaIntegrationTests-context.xml" )
@TransactionConfiguration( transactionManager = "transactionManager", 
                       defaultRollback    = true )
@Transactional
public class JpaIntegrationTests 
 extends     AbstractTransactionalJUnit4SpringContextTests 

  @Autowired
  protected LicenseDao licenseDao;
  @Test
  public void getLicenses()
  
    List<License> licenses = this.licenseDao.getLicenses();   
    assertEquals( "Expecting 1 license from the query",
              super.countRowsInTable( "product_schema.license" ),
              licenses.size() );                  
  

是否需要执行某些特定步骤才能在 Eclipse 中将其作为 JUnit 测试运行?

【问题讨论】:

你在使用 m2eclipse 吗?运行 mvn test-compile 是否修复它? 您的 context.xml 在类路径中的什么位置?您可以在 (locations = "classpath:/META-INF/JpaIntegrationTests-context.xml) 中添加类路径标记,这将解析为您的 src/test/resources/META-INF/JpaIntegrationTests-context.xml 文件。 【参考方案1】:

首先,将org.springframework.test.context 的日志级别设置为DEBUG。这应该会告诉您 Spring TestContext Framework (TCF) 正在做什么。

请注意,使用上述配置,TCF 将尝试从 classpath:/JpaIntegrationTests-context.xml(即,在您的类路径的根目录中)加载您的应用程序上下文。因此,请确保 JpaIntegrationTests-context.xml 文件实际上存在于类路径的根目录中(例如,Maven 项目布局的 /src/test/resources/JpaIntegrationTests-context.xml 文件)。对于 Maven 项目布局,您需要确保 /src/test/resources 在您的 IDE 中配置为源文件夹。

如果这不能帮助您解决问题,请发布日志中的 DEBUG 输出。

问候,

Sam(Spring TestContext 框架的作者)

【讨论】:

【参考方案2】:

引用Java Project: Failed to load ApplicationContext

“来自Sping-Documentation:普通路径,例如“context.xml”,将被视为来自定义测试类的同一包中的类路径资源。以斜杠开头的路径被视为完全限定的类路径位置,例如“/org/example/config.xml”。

【讨论】:

以上是关于Spring JUnit 测试使用 TestContext.retrieveContextLoaderClass(TestContext .java:197) 获取 NullPointerExcept的主要内容,如果未能解决你的问题,请参考以下文章

Spring之junit测试集成

Spring Test+JUnit整合使用

使用junit进行集成spring项目的单元测试

使用junit进行集成spring项目的单元测试

Spring - JUnit整合测试

Spring-boot,使用不同配置文件的 JUnit 测试