【发布时间】:2015-09-18 13:38:19
【问题描述】:
我有一个要测试的单例类。它为该类的构造函数使用@Inject 注释。现在为了测试,我想在我的测试类中为该类调用一个公共方法,但无法这样做。我已经模拟了一个传递给构造函数的对象。
@Inject
private SomeClass(SomeOtherClassObject obj) {
super(obj);
}
我用以下方式模拟了上面的私有构造函数:
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)
}
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
将构造函数设为私有是使您的类不可测试的最佳方式。使其至少受到包保护,以便测试可以调用构造函数。
-
我明白,但我无法更改课程代码。我只需要测试它。有什么建议么?另外,我刚刚注意到当我尝试运行测试时出现错误,它给出的错误是构造函数不是预期的。如何将我拥有的模拟对象传递给我使用上述代码创建的构造函数?
标签: java unit-testing singleton guice