0

実行中の機能のメソッドを取得するにはどうすればよいですか? さまざまなデータセットを使用してデータベースを準備したいと考えています。このデータセットは、次のような注釈で定義する必要があります。

@PrepareDB("dataset1")
def "feature 1"() {

}

次のように setup メソッドで使用する必要があります。

def setup() {
    def dataset = currentTestMethod.getAnnotation().value //pseudo method
    prepareDB(dataset)
}

JUnit4でも同じことをしました。@Rule を使用して現在のメソッド名を取得し、リフレクションごとにアノテーション値を取得しました。スポックでこれを行うにはどうすればよいですか?

更新:私は自分で解決策を見つけました。JUnit4 の TestWatcher を使用すると、現在実行中のテスト メソッドから注釈を取得できます。

@Rule
public TestRule watcher = new TestWatcher() {
    protected void starting(Description description) {
        println description.getAnnotation(PrepareDB.class).value()
    };
};
4

1 に答える 1

1

データベース ロジックをアノテーション駆動型の Spock 拡張機能または JUnit ルールとして実装することをお勧めします。どちらも、実行された機能メソッドのアノテーションに簡単にアクセスできます。

あなたの質問に答えるには、setup メソッドから注釈を取得するには、 (Spock 0.7 以降) を使用しますspecificationContext.iterationInfo.parent.featureMethod.reflection.getAnnotation(PrepareDB)。Spock 1.0-SNAPSHOT 以降では、これは に変更されました specificationContext.currentFeature.featureMethod.getAnnotation(PrepareDB)

于 2013-04-08T06:22:51.323 に答える