我有一个我要测试的Singleton类。它为该类的构造函数使用@Inject批注。现在进行测试我想在我的测试类中为该类调用一个公共方法,但是无法这样做。我已经模拟了一个传递给构造函数的对象。
Singleton mockSingleton = PowerMock.createMock(Singleton.class);
PowerMock.expectNew(Singleton.class).andReturn(mockSingleton);
我用以下方式模拟了上面的私有构造函数:
public SomeClass someMethod(int 1, String 2){
//some logic
return (Object of SomeClass)
}
我不明白如何调用以下方法
:
任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
如果您也使用guice,则可以在测试中提供一个模块,将SomeOtherClassObject绑定到您的模拟实例。然后通过Guice的注入器创建SomeClass实例。
@Test
public void test() {
SomeOtherClassObject other = ...; // what ever you need to create the Mock
Injector injector = Guice.createInjector(new AbstractModule(){
public void configure() {
bind(SomeOtherClassObject.class)toInstance(other);
}
});
SomeClass some = injector.getInstance(SomeClass.class); // guice takes care of the constructor injection
some.someMethod(...);
}
如果你不使用guice,请查看needle4j。它是一个测试支持库,可在需要注入时自动注入模拟。但它只适用于easymock或mockito。