java-如何改善Guava Optional的Mockito默认行为?

我开始将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());
    }
}

下一步将扩展一个测试运行程序,它将使用该工厂将模拟注入到@Mock注释字段中.如果您尚未听说自定义JUnit测试运行程序,请搜索它们.

上一篇:无法监视Android类


下一篇:java-Mockito:尚未定义但知道返回类型的模拟方法