java - 使用本地镜像测试 URI

标签 java spring junit

下面的方法采用指向图像的 url 并返回输入流:

public InputStream getIs(URI uri) {
  // some implementation...
}

为了对此进行单元测试,我计划使用通过 Google 搜索选择的网址:https://p.bigstockphoto.com/GeFvQkBbSLaMdpKXF1Zv_bigstock-Aerial-View-Of-Blue-Lakes-And--227291596.jpg "因此创建一个 URI 使用:

new URI("https://p.bigstockphoto.com/GeFvQkBbSLaMdpKXF1Zv_bigstock-Aerial-View-Of-Blue-Lakes-And--227291596.jpg")

但这似乎是不好的做法。 我应该将图像添加到 Maven 项目的 test/resources 文件夹中并从那里读取图像吗? 如果我这样做,那么 URI不再有效,因为

new URI("classpath:testimage.jpg")

抛出异常:

org.springframework.web.client.ResourceAccessException:
  I/O error on GET request for "classpath:testimage.jpg":
  URI does not specify a valid host name: classpath:testimage.jpg;
  nested exception is org.apache.http.client.ClientProtocolException:
  URI does not specify a valid host name: classpath:testimage.jpg

最佳答案

是的,单元测试的最佳实践是使用资源文件。 尝试使用此解决方案为您的 getIs() 方法提供正确的 URI 值:

URL res = getClass().getClassLoader().getResource("image.jpg");
URI uri = res.toURI();

关于java - 使用本地镜像测试 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59596085/

相关文章:

java - 如何根据外部输入运行 Junit/TestNG 测试?

java - 如何访问私有(private)方法内部的对象?

java - Android - 将修饰符更改为静态?

java - 使用搜索服务器服务层与数据库层来查找实体

spring - @TestPropertySource 未加载属性

java - 使用 Spring 注入(inject) Google Guava Hashmultimap

java - JUnit 4 与 TestNG 6

java - java 存储应用程序状态的最佳方式

java - Docker-Compose - 控制 docker-compose 执行顺序

java - 使用 pow(x,y) 比较大数时, "<"小于运算符和 "<="运算符之间的差异