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

Spring JUnit测试使用TestContext.retrieveContextLoaderClass(TestContext.java:197)获取NullPointerException,spring,junit,nullpointerexception,Spring,Junit,Nullpointerexception,使用Helios、Spring3.0.5(TestContext框架)和JUnit4.7。我收到一个初始化错误,表明它找不到ContextConfiguration。我在后台运行了ProcMon,并确定它看起来一点也不像。我尝试了xml文件的逻辑位置,但没有成功。我不清楚我做错了什么。代码如下: package com.hwcs.veri.agg.dao; import static org.junit.Assert.assertEquals; import java.util.List; i

使用Helios、Spring3.0.5(TestContext框架)和JUnit4.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() );                  
  }
}
package com.hwcs.veri.agg.dao;
导入静态org.junit.Assert.assertEquals;
导入java.util.List;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.test.context.ContextConfiguration;
导入org.springframework.test.context.junit4.AbstractTransactionalJUnit4 SpringContextTests;
导入org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
导入org.springframework.test.context.transaction.TransactionConfiguration;
导入org.springframework.transaction.annotation.Transactional;
导入com.hwcs.veri.jpa.License;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(位置={“/JpaIntegrationTests context.xml”})
@TransactionConfiguration(transactionManager=“transactionManager”,
defaultRollback=true)
@交易的
公共类JpaIntegrationTests
扩展AbstractTransactionalJUnit4SpringContextTests
{
@自动连线
受保护的许可证;
@试验
公共许可证()
{
List licenses=this.licenseDao.getLicenses();
assertEquals(“应为查询中的1个许可证”,
super.countRowsInTable(“产品架构许可证”),
许可证。大小();
}
}

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

首先,将
org.springframework.test.context的日志级别设置为DEBUG。这应该告诉您SpringTestContext框架(TCF)正在做的一切

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

如果这不能帮助您解决问题,请从日志中发布调试输出

问候,

Sam(SpringTestContext框架的作者)

引用


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

您正在使用m2eclipse吗?运行mvn test compile修复了它吗?类路径上的context.xml在哪里?您可以在:(locations={“classpath:/META-INF/JpaIntegrationTests context.xml})中添加类路径标记,该标记将解析为您的src/test/resources/META-INF/JpaIntegrationTests-context.xml文件。