2017-05-02 65 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返回方法的调用,将导致该值(如果没有明确指示)。