2017-05-02 92 views
1

我想添加一個測試類的靜態方法:靜態方法返回空值

class SomeClass { 

    public static int getLoginPage() { 
    if (otherStaticMethod()) { 
     return Screen.FOO; 
    } 
    return Screen.BAR; 
    } 
} 

注意FOO和BAR具有零值型動物。

我的測試類:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({SomeClass.class}) 
public class SomeClass_getLoginPage { 

    @Test 
    public void testgetLoginPage() {  
    PowerMockito.mockStatic(SomeClass.class);  

    Mockito.when(SomeClass.otherStaticMethod()).thenReturn(true); 

    assertTrue(SomeClass.getLoginPage() == Screen.FOO); 


    Mockito.when(SomeClass.otherStaticMethod()).thenReturn(false); 

    assertTrue(SomeClass.getLoginPage() == Screen.BAR); 
    } 
} 

但當方法otherStaticMethod被調用時,getLoginPage返回0,它應該返回FOOBAR的方法。我該如何解決這個問題?

+1

[PowerMock,模擬靜態方法,然後調用所有其他靜態方法上的實際方法]的可能重複(http://stackoverflow.com/questions/14651138/powermock-mock-a-static-method-then-call-真正的方法上,所有其他-靜) – kan

回答

1

只需使用重載的spy方法,而不是實際模擬整個類。

PowerMockito.spy(SomeClass.class); 

現在默認情況下,所有的靜態方法都會以真正的實現運行,直到你真正模擬其中的一個。

0的原因是因爲你mockStatic嘲笑所有的靜態方法和默認的int返回方法的調用,將導致該值(如果沒有明確指示)。