混合使用 Guice 和 JMockit 时出现 GenericSignatureFormatError
GenericSignatureFormatError when mixing Guice and JMockit
Guice 和 JMockit 似乎不太合得来...
以下测试抛出 GenericSignatureFormatError
。为什么?
@RunWith(JMockit.class)
public class GuiceAndJMockitTest {
public interface Foo {
}
@Test
public void guiceAndJMockitGetAlong(@Mocked final Foo foo) {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Foo.class).toInstance(foo);
}
});
}
}
谢谢
JMockit 1.13
指南 3.0
这似乎是由于实现给定接口的 JMockit 生成的 class 中的某些无效 "generic info"。所以,显然是 JMockit 中的一个错误;我会调查的。
但是,如果您想模拟实现接口并由 Guice 注入的对象,我建议使用 @Capturing
而不是 @Mocked
。这样,任何实现声明的模拟类型的 class 也将被模拟。并且不需要创建特定于测试的 Guice 注入器;只需使用与生产相同的 Guice 模块。
Guice 和 JMockit 似乎不太合得来...
以下测试抛出 GenericSignatureFormatError
。为什么?
@RunWith(JMockit.class)
public class GuiceAndJMockitTest {
public interface Foo {
}
@Test
public void guiceAndJMockitGetAlong(@Mocked final Foo foo) {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(Foo.class).toInstance(foo);
}
});
}
}
谢谢
JMockit 1.13
指南 3.0
这似乎是由于实现给定接口的 JMockit 生成的 class 中的某些无效 "generic info"。所以,显然是 JMockit 中的一个错误;我会调查的。
但是,如果您想模拟实现接口并由 Guice 注入的对象,我建议使用 @Capturing
而不是 @Mocked
。这样,任何实现声明的模拟类型的 class 也将被模拟。并且不需要创建特定于测试的 Guice 注入器;只需使用与生产相同的 Guice 模块。