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 に答える