我想知道是否可以通过实现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
}
}
我应该使用反射来完成这项工作吗?
答案 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
获取它。