使用spring test context来初始化数据

时间:2013-03-18 21:23:07

标签: spring spring-test

我想知道是否可以通过实现TestExecutionListener接口来初始化测试数据,并使用beforeTestClass和afterTestClass来加载/处理数据。测试数据将在平面文件中提供,我希望数据文件位置作为测试类注释的一部分

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring/test-dao.xml"})
@TestExecutionListeners(
{ 
  DependencyInjectionTestExecutionListener.class,
  InsertTestDataExecutionListener.class
})
@DataSetLocation("classpath:data/test-dao-dataset.xml")
public abstract class AbstractDaoTests {
   public List testdata....
}

在上面的伪代码中,InsertTestDataExecutionListener将实现TestExecutionListener接口,并在beforeClass方法中,从注释中获取数据集位置。我试图找出如何使用TestContext设置属性'testdata'的内容。

public class InsertTestDataExecutionListener implements TestExecutionListener {
   public void beforeTestClass(TestContext aContext) {
       DataSetLocation dsLocation = aContext.getTestClass().getAnnotation(
            DataSetLocation.class
            );
       //Load the contents of the file using the dataset location.

       ?? How to set the property of 'testdata' from the Abstract class
   }
}

我应该使用反射来完成这项工作吗?

1 个答案:

答案 0 :(得分:0)

我不记得在数据加载期间不需要访问Spring上下文(它只是类路径中的普通文件)。所以,你可以在没有听众的情况下完成工作:

public abstract class AbstractDaoTests {
   public List testdata;
   public List getTestData() {...}
   public abstract String getDataLocation();

   public AbstractDaoTests () {
       testData = loadDataFromLocation(getTestData());
   }
}


public class ConcreteTest extend AbstractDaoTests  {
    @Override
    public String getDataLocation() {return "classpath:data/test-dao-dataset.xml";}
}

当然,您可以使用注释而不是抽象方法,并从构造函数中的this.getClass().getAnnotation获取它。