0

我想知道是否可以通过实现 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
   }
}

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

4

1 回答 1

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构造函数中获取它。

于 2013-03-18T22:27:03.323 回答