我尝试开始单元测试中型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
的调用使用mock:
compiler.assertCompilesTo(dsl, expectedJava);
问题:
我在哪里告诉guice / Xtext将注入绑定到mock?
答案 0 :(得分:4)
如果使用RunWith和InjectWith注释测试用例,则将通过特定的IInjectorProvider实现注入测试类。
如果该注入器提供程序使用自定义模块(如您所示),则使用该配置注入测试用例。但是,您必须确保在整个测试代码中使用此进样器(例如,您不依赖于已注册的进样器等)。
查找以下代码作为示例(尚未编译,但这是您必须遵循的基本结构):
@RunWith(typeof(XtextRunner))
@InjectWith(typeof(LanguageInjectorProvider))
public class TestClass {
@Inject
CompilationTestHelper compiler
...
}