2017-08-19 1 views
1

Kotlinにall openというコンパイラプラグインがあります。いくつかの注釈を持つすべてのクラスが強制的に開かれます。gradleがテストを構築しているときにいくつかのコードを実行する方法

テスト用にこの機能を使用したいのですが、私はプロダクションコードには入れたくありません(クラスを閉じたい)。これどうやってするの?

私のような何か試してみました:

test { 
    allOpen { 
    annotation('com.my.Annotation') 
    } 
} 

をしかし、コードは常に実行されます。

+0

ただし、この注釈がテストクラスでのみ使用されている限り、これは問題ではありません。とにかく、テストに必要なのはなぜですか? – s1m0nw1

+0

注釈は、Mockitoが私のプロダクションコードを模倣できるようにするために使用されているので、注釈は私のプロダクションコードに含まれています:(私がこれを必要とするのはなぜですか?[その他の方法があるので] http://hadihariri.com/2016/ 10/04/Mocking-Kotlin-With-Mockito /)はクローズドクラスを模擬していますが、実際には遅いです(https://github.com/mockito/mockito/issues/1142)。 –

答えて

1

プラグインがbuild.gradleファイルのルートに適用されているために発生します。

プロジェクトのプロパティが設定されていない限り、100%動作するソリューションはプラグインを適用しないことです。

if (project.hasProperty("allopen")) { 

    apply plugin: "kotlin-allopen" 

    allOpen { 
    annotation('com.my.Annotation') 
    } 

} 

と入力し、プロパティをgradle -Pallopen testで実行します。

おそらくいくつかのGradleの達人が、より良い解決策でチャイムインすることができます。

関連する問題