2012-02-21 86 views
0

我想測試下面的代碼位:)使用PowerMock獲得ATG核測試結果NPE

GSARepository productCatalog = (GSARepository) Nucleus.getGlobalNucleus().resolveName("/atg/commerce/catalog/ProductCatalog"); 
for (RepositoryItem orderItem : orderItems) { 
    String product = (String) orderItem.getPropertyValue(PropertyNameConstants.PRODUCTID); 
    if (!ProductUtils.isSpecial(product, productCatalog)) { 
     isSpecial = false; 
     break; 
    } 
} 

明確Nucleus.getGlobalNucleus(是靜態的。

按照文檔我應該能夠使用:

PowerMockito.mockStatic(Nucleus.class); 
PowerMockito.when(Nucleus.getGlobalNucleus()).thenReturn(globalNucleusMock);  
PowerMockito.when(globalNucleusMock.resolveName("/atg/commerce/catalog/ProductCatalog"); 

Eitherway,我仍然得到一個空指針,當我打電話:

Nucleus.getGlobalNucleus().resolveName("/atg/commerce/catalog/ProductCatalog") 

回答

2

不要忘了使用JUnit亞軍:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Nucleus.class) 
public class YourClassTest { 
+0

+1,用於提取我誤以爲@ PrepareForTest(Nucleus.class)。我使用TestNG作爲我的測試框架,所以@ RunWith目前無法幫助我。我懷疑我需要使用@ObjectFactory來生成我的測試運行器。在那裏丟失了一些配置,所以下一步將對此進行整理。 – radimpe 2012-02-21 09:00:04

+0

發現我錯過了註解: @PrepareForTest(Nucleus.class) 此外,還需要創建的ObjectFactory: @ObjectFactory 公共IObjectFactory getObjectFactory(){ \t回報新PowerMockObjectFactory(); } – radimpe 2012-02-21 09:52:00

+0

什麼是「globalNucleusMock」這裏?你有沒有在某個地方宣佈它? – Saurabh 2013-07-08 10:05:01