java - 如何模拟 StorageOptions.newBuilder()

标签 java google-cloud-platform junit mockito google-cloud-storage

你能帮我模拟 StorageOptions.newBuilder()

要模拟的代码:

StorageOptions.newBuilder.setProjectId("Test").build().getService()

我写的代码:

Storage mockStorage = Mockito.mock(Storage.class);

MockedStatic<StorageOptions> storageOptionsMock = Mockito.mockStorage(StorageOptions.class);
storageOptionsMock.when( ()-> StorageOptions.newBuilder().setProjectId("Test").build().getService()).thenReturn(mockStorage);

错误:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Storage$MockitoMock$1939527098 cannot be returned by newBuilder()
newBuilder() should return Builder

最佳答案

由于您要链接大量方法调用,因此可以使用 Mockito.RETURNS_DEEP_STUBS 指示 Mockito 返回所有必需的中间 stub /模拟。

Storage mockStorage = Mockito.mock(Storage.class);
MockedStatic<StorageOptions> storageOptionsMock = 
    Mockito.mockStatic(StorageOptions.class, Mockito.RETURNS_DEEP_STUBS);

storageOptionsMock.when(()->  
    StorageOptions.newBuilder()
                  .setProjectId("Test")
                  .build()
                  .getService())
.thenReturn(mockStorage);

assertThat(StorageOptions.newBuilder()
    .setProjectId("Test")
    .build()
    .getService())
.isEqualTo(mockStorage);

但是由于这被认为是 anti pattern ,您可能需要重构代码以避免这种情况。

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

相关文章:

java - 创建对象并调用方法时出错,: cannot find symbol错误

google-cloud-platform - 写入 Spanner 的数据流作业中出现 EOFException

kubernetes - 无法访问谷歌云上暴露的外部 IP

java - 更改 Camel TestSupport 中的 log4j 设置

junit - 来自 JUnit 的 TestNG @RunWith

java - Java 中的并行计算

java - 无法识别的请求 : { _request: evaluate } in visual studio code

java - Android: Unresolved 依赖关系

python - 使用 Google Cloud Storage 和 Cloud Functions with Python 3.7 进行轻量级 ETL

java - Mockito - Mockito 无法模拟此类 - IllegalArgumentException : Could not create type