我希望静态工厂方法返回的对象的非静态方法返回特定的结果。
在我完成了这个设置之后,我的测试代码将通过正在测试的另一段代码间接调用ConnectionFactory.getConn("ABC")。
PowerMockito.when (ConnectionFactory.getConn (ABC) .getCurrentStatus ()) .thenReturn (ConnectionStatus.CONNECTED);
我得到了上面语句的NPE。
- 我已经有@PrepareForTest({FXAllConnectionFactory.class, ConnectionStatus.class})在我的junit测试类的开始。
正确的做法是什么?
提前感谢:)
我猜有没有点在创建一个流畅/链式调用为您的测试设置。
你看:
PowerMockito.when(ConnectionFactory.getConn("ABC").getCurrentStatus()).thenReturn(ConnectionStatus.CONNECTED);
可能意味着配置两个调用:
-
ConnectionFactory.getConn("ABC")
再 -
getCurrentStatus()
对第一次呼叫的结果
是什么让你认为PowerMockito神奇地知道第一次调用getConn()应该返回什么 ?
换句话说:
- 首先提供一个模拟连接对象X;并配置模拟,以便getConn()返回该对象
- 除此之外,你必须配置X在调用getCurrentStatus()时返回所需的值…在X !
所以,答案实际上是:你想做的是不可能的。这个想法是;您指定的行为如下:
when A.foo() is called; then return some X
在PowerMockito中没有魔法可以把
when A.foo().bar() is called thren return Y
到
when A.foo() is called, return X; when X.bar() is called return Y