如何模拟一个方法来返回一些东西而不是抛出异常(PowerMock?)

时间:2016-04-14 22:18:39

标签: java junit mocking mockito powermock

我有一个方法执行测试以查看用户是否已获得授权,然后在其中包含我想测试的其他逻辑,而不实际登录以授权我的用户。

所以,我有这个静态方法OAuthUtil.retrieveAuthority(),它返回一个字符串,让我们说“域名”。

我的构造函数类似于

public ImplService(){
    String authority = OAuthUtil.retrieveAuthority();
   //do something else
}

我还有另一种方法,就是我实际尝试测试的方法,比如getList()

如果Subject为null,那么

retrieveAuthority()反过来会抛出一个WebApplicationException,它将永远是,但我想完全绕过它。所以,我希望我的模拟返回一些东西(“域”)而不是抛出异常。这可能吗?

所以,我的测试现在是这样的,当遇到异常时它会失败:

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
public class TestMine {
    public ImplService impl;

    @Before
    public void setUp() {
        PowerMockito.mockStatic(OAuthUtil.class);
        PowerMockito.when(OAuthUtil.retrieveAuthority()).thenReturn("domain");
        ImplService impl = new ImplService();
    }

    @Test
    public void getListTest() throws NotFoundException {
        Response response = impl.getList();
    }
}

1 个答案:

答案 0 :(得分:2)

是的,这是完全可能的。你需要添加:

@PrepareForTest({OAuthUtil.class})
public class TestMine { //above this line