私は中規模のXtextプロジェクトのユニットテストを開始しようとしています。Xtextテストで生産性環境とは異なるオブジェクト注入を使用するにはどうすればよいですか?
現在、ジェネレータは、テスト中に模擬したい外部リソースに依存しています。したがって、必要なオブジェクトを@Inject
経由でGeneratorクラスに注入します。
例えば擬似コードで:
class MyGenerator implements IGenerator{
@Inject
ExternalResourceInterface resourceInterface;
...
}
私は、言語のRuntimeModule内のバインディング、実際に作成します。
class MyRuntimeModule{
...
@Override
public void configure(Binder binder) {
super.configure(binder);
binder.bind(ExternalResourceInterface .class).to(ExternalResourceProductionAcess.class);
}
...
}
これは、本番環境のために正常に動作します。 CompilationTestHelper
に次の呼び出しはモック使用するように
しかし、発電機のテストケースでは、私は、私の嘲笑バージョンとの結合を交換したいと思います:
compiler.assertCompilesTo(dsl, expectedJava);
質問:
私はguice/Xtextにインジェクションをモックにバインドするように教えますか?
感謝。生成されたInjectorProviderを使用すると、私のカスタムモジュールがロードされます。しかし、InjectorProviderがバインディングにMyRuntimeModuleを使用するとき、ExternalResourceProductionAccessがロードされ、私のモックはロードされないためです。カスタムInjectorProviderを記述しようとすると、XTextは注入されたリソースをロードしません。 – lwi
数年前、VIATRAのXtextジェネレータで生成されたInjectorProviderをカスタマイズしました。たぶんあなたはそれを見ることができます:http://git.eclipse.org/c/viatra/org.eclipse.viatra.git/tree/query/tests/org.eclipse.viatra.query.patternlanguage.emf.tests /src/org/eclipse/viatra/query/patternlanguage/emf/tests/EMFPatternLanguageInjectorProvider.java –