我想测试class1
调用单例类getInstance
的方法:
Class ivDomain {
public String method1() {
id=Singleton.getInstance().generateId()
... code
}
}
当我使用Junit进行测试时,我在单例类上得到NullPointerException
。我该如何解决这个问题?
答案 0 :(得分:4)
使用静态访问的单例的类很难测试。将你的ivDomain类更改为将单例实例作为参数添加到它的构造函数中,然后正常模拟它。您应该使用依赖注入框架(例如Guice)来使这种开发方式更容易。
答案 1 :(得分:1)
你不应该模拟Singleton;只需更改代码,以便getInstance()
不返回null。
答案 2 :(得分:1)
最有可能的原因 - 没有检查你的Singleton的代码 - 它的初始化无法加载一些外部配置,因此失败。
自动单元测试中的单身人士可能是一个问题,因为有时候你喜欢他们对你测试的特定场景有不同的行为(例如你想要一个generateId
返回-1的场景,另一个场景返回4354353时另一个场景它会抛出一个RuntimeException
- 这样你就可以看到使用Singleton的代码是如何工作的。在这种情况下,建议改变设计,因为Singletons不属于受欢迎的设计模式,有时被视为反模式。
答案 3 :(得分:1)