2016-11-09 181 views
1

我想要靜態工廠方法返回的對象的非靜態方法返回特定的結果。powermockito靜態和非靜態方法鏈

完成此設置後,我的測試代碼將通過正在測試的另一段代碼間接調用ConnectionFactory.getConn(「ABC」)。 (ConnectionFactory.getConn(「ABC」)。getCurrentStatus())。然後返回(ConnectionStatus.CONNECTED);然後返回ConnectionModel.getConn(「ABC」)。

我得到了上述聲明的NPE。

  • 我已經有了@PrepareForTest({FXAllConnectionFactory.class,ConnectionStatus.class})在我的junit測試類的開始。

這樣做的正確方法是什麼?

感謝提前:)

回答

0

創造一個流暢/鏈接調用你測試設置沒有點。

你看:

PowerMockito.when(ConnectionFactory.getConn("ABC").getCurrentStatus()).thenReturn(ConnectionStatus.CONNECTED); 

很可能意味着配置電話:

  1. ConnectionFactory.getConn("ABC")並就第一次調用的結果,那麼
  2. getCurrentStatus()

什麼使你認爲PowerMockito神奇地知道應該由第一次調用getConn()返回什麼?

換句話說:

  1. 首先提供一個嘲笑Connection對象X;並配置您的模擬,以便getConn()返回該對象
  2. 除此之外,您必須配置X以便在X上調用getCurrentStatus()時返回所需的值!

所以,答案其實是:你想做的事是不可能的。這個想法是;您指定的行爲,如:

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 

您必須指定一步一步來。

+0

ConnectionFactory.getConn(「ABC」)已被設置並將返回correctType的對象。 – ali90

+0

然後,您可能會顯示** all **您的代碼。如果你的代碼會做你期望的事情,那麼你不會在這裏,對嗎? – GhostCat