gpt4 book ai didi

java - 如何改进 Guava Optional 的 mockito 默认行为?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:47 25 4
gpt4 key购买 nike

我开始使用Guava Optional作为 null object pattern 的一部分并希望改进 Mockito 中的使用,其中 null 是模拟对象的默认返回值。要正确运行,需要明确告诉 Mockito 使用 Optional.absent() 代替:

import org.mockito.*;
import org.testng.*;
import org.testng.annotations.*;
import com.google.common.base.Optional;


public class Example {

@Mock
private MyObject underTest;

@Test
public void testExample() {
// fails
// assertNotNull(underTest.get());

Mockito.when(underTest.get()).thenReturn(Optional.absent());
Assert.assertNotNull(underTest.get());
}

public class MyObject {

public Optional<Object> get() {
return Optional.absent();
}
}

@BeforeClass
public void beforeClass() {
MockitoAnnotations.initMocks(this);
}
}

如果实际类型为 Optional,是否有一种简单的方法可以改进 mockito 以自动返回 Optional.absent() 而不是 null

最佳答案

我试图通过 @Before 注释方法中的反射来解决它,但是,我没能让它工作。

您发现的解决方案可以通过创建您自己的静态工厂来改进,该工厂使用 OptionalAnswer 创建模拟并使用它而不是默认的 Mockito 工厂:

class MockitoOptional{
public static <T> T mock(Class<T> classToMock) {
return Mockito.mock(classToMock, new OptionalAnswer());
}
}

下一步将是扩展一个测试运行器,该运行器将使用该工厂将模拟注入(inject)到 @Mock 注释字段中。如果您还没有听说过自定义 JUnit 测试运行器,请搜索它们。

关于java - 如何改进 Guava Optional 的 mockito 默认行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22554470/

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