标签:null guava mockito java design-patterns
我开始将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测试运行程序,请搜索它们.
标签:null,guava,mockito,java,design-patterns 来源: https://codeday.me/bug/20191121/2055806.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。