2017-08-25 11 views
0

@RunWith(Cucumber)で実行されるキュウリ試験があります。このテストでは、他のクラスの静的フィールドを使用します。唯一のラインFeature: Noneが含まれており、何のステップの定義が存在しないJUnitとキュウリに同じクラスローダーを使用

キュウリテスト

@RunWith(Cucumber) 
@CucumberOptions(
    features = 'src/test/resources/features/cucumber-test.feature', 
    glue = ['src/test/groovy'] 
) 
class CucumberTest { 
    @BeforeClass 
    static void setUp() { 
    StaticClass.filed 
    } 
} 

静的クラス

class StaticClass { 
    static { 
    filed = UUID.randomUUID().toString() 
    println "Field initialized with value $filed in ${this.classLoader.toString()}\n" 
    } 
    static String filed 
} 

cucumber-test.featureを:それは次のようになります。このテストを実行すると、出力は

Field initialized with value 649b6d18-fe5a-4993-a92e-74645c3ab07d in [email protected] 
Field initialized with value 9639e4de-661f-4ac7-afc9-715cdd17bb35 in [email protected] 

です。したがって、静的ブロックは2回実行されましたが、クラスローダーは異なります。 JUnit用のクラスローダーとCucumberランナー用のクラスローダーがあるようです。

StaticClass.filedsetUpメソッドでコメントすると、スタティックブロックは1回だけ実行されます。唯一Groovyのクラスローダと、この時間は

Field initialized with value 73d1d302-826c-4ec3-a9db-c065b399487f in [email protected] 

私は私のプロジェクトで持っている依存関係は、次のとおりです。

dependencies { 
    compile 'info.cukes:cucumber-groovy:1.2.5' 
    compile 'info.cukes:cucumber-junit:1.2.5' 
    compile 'org.codehaus.groovy:groovy-all:2.4.12' 
} 

両方のJUnitとキュウリのランナーのために同じクラスローダを使用する方法はありますか?

答えて

2

あなたCucumberOptionsを見てみましょう:

glue = ['src/test/groovy'] 

直接指定されたソースフォルダ

からクラス(したがって、それらを再コンパイル)を取得するために別のGroovyのクラスローダを産卵でこの文の結果必要なのです代わりにクラスパスから

glue = ['classpath:your.step.definitions.package.name'] 

あるいはsimplierをGroovyのステップの定義を取るためにキュウリを指示する:

glue = ['classpath:'] 

- パッケージ名をまったく気にしたくない場合。しかし、最後のものは多くの場合に受け入れられないかもしれないことに注意してください。それは利用可能なすべてのクラスパスのスキャン/ロードをトリガーするので、ステップ定義のための正確なパッケージ名をつけることが一般的に好ましいです。

+0

素敵な答え!ありがとう – lolotron

関連する問題