gpt4 book ai didi

junit - 如何使用 PowerMockito 和 JUnit 模拟 getResourceAsStream 方法?

转载 作者:行者123 更新时间:2023-12-01 12:33:39 26 4
gpt4 key购买 nike

我尝试模拟在构造函数中调用的 getResourceAsStream 方法。

public Conn() {
stream = Conn.class.getClass().getResourceAsStream(PATH);
}

对于 mock 框架,我更喜欢 Mockito + PowerMockito。

    @RunWith(PowerMockRunner.class)
@PrepareForTest(Conn.class)
public class ConnTest {

@Mock
private InputStream streamMock;

private Conn conn;

@Before
public void before() {
initMocks(this);
}

@Test
public void test() {
PowerMockito.mockStatic(Conn.class);
PowerMockito.when(Connector.class.getResourceAsStream("/prop.properties")).thenReturn(streamMock);
conn = new Conn();
}

@After
public void after() {
reset(streamMock);
}
}

但是方法 thenReturn 不返回模拟。我该如何解决?

最佳答案

您可以将获取资源抽象为一个类。

class StreamFetcher {

InputStream fetchStream(String path) {
return StreamFetcher.class.getClass().getResourceAsStream(path);
}

}

在你的类里面

class Conn {
public Conn(StreamFetcher streamFetcher) {
stream = streamFetcher.fetchStream(PATH);
}
}

这样你甚至不必做一个模拟——你可以为测试创建你自己的 impl 来做你需要它做的任何事情。

您实际上还可以抽象更多内容,并可能以某种方式处理 Stream。我不了解业务背景,因此无法在这方面真正帮助您。

关于junit - 如何使用 PowerMockito 和 JUnit 模拟 getResourceAsStream 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29043833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com