gpt4 book ai didi

java - 如何模拟 MyClass.class.getClassLoader()?

转载 作者:行者123 更新时间:2023-12-02 04:26:50 24 4
gpt4 key购买 nike

是否可以模拟(或至少抑制)此类调用

MyClass.class.getClassLoader().getResourceAsStream("file.txt")

使用PowerMock

最佳答案

一种解决方案(我认为这就是 bayou.io 在其中一条评论中的意思)是抽象出资源的检索,如下所示:

public interface ResourceRetriever{
public InputStream getResource(String location);
}

public class ClassloaderResourceRetriever implements ResourceRetriever{
@Override
public InputStream getResource(String location){
this.getClass().getClassLoader().getResourceAsStream();
}
}

public class MyClassThatNeedsSomeResources {
private final ResourceRetriever resourceRetriever;

public MyClassThatNeedsSomeResource (ResourceRetriever resourceRetriever){
this.resourceRetriever = resourceRetriever;
}

public void myMethodThatNeedsSomeResource(){
InputStream resource = resourceRetriever.getResource("foo");
// use your newly retrieved resource
}
}

因此,您可以轻松模拟检索器,如下所示

...
@Test
public void resourceShouldBeRetrieved() {
// given
ResourceRetriever r = Mockito.mock(ResourceRetriever.class);
ByteArrayInputStream fakeResource = new ByteArrayInputStream("foobar".getBytes());
when(r.getResource("foo").thenReturn(fakeResource);

MyClassThatNeedsSomeResources c = new MyClassThatNeedsSomeResources(r);


// when
c.myMethodThatNeedsSomeResource();

// then
verify(r).getResource("foo");
}

这种抽象还将使您的代码更具可重用性,因为您可以轻松实现与 Spring 一起使用的 ResourceRetriever Resources , URL s,Files或其他变体。

关于java - 如何模拟 MyClass.class.getClassLoader()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30493619/

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