Use Mockito 2.0.7 to mock lambda expressions(使用 Mockito 2.0.7 模拟 lambda 表达式)
问题描述
我想像这样模拟我的存储库中提供的查询:
I want to mock a query provided on my repository like this:
@Test
public void GetByEmailSuccessful() {
// setup mocks
Mockito.when(this.personRepo.findAll()
.stream()
.filter(p -> (p.getEmail().equals(Mockito.any(String.class))))
.findFirst()
.get())
.thenReturn(this.personOut);
Mockito.when(this.communityUserRepo.findOne(this.communityUserId))
.thenReturn(this.communityUserOut);
...
我的 @Before
方法如下所示:
My @Before
method looks like this:
@Before
public void initializeMocks() throws Exception {
// prepare test data.
this.PrepareTestData();
// init mocked repos.
this.personRepo = Mockito.mock(IPersonRepository.class);
this.communityUserRepo = Mockito.mock(ICommunityUserRepository.class);
this.userProfileRepo = Mockito.mock(IUserProfileRepository.class);
}
不幸的是,当我运行测试时,我收到了错误:
Sadly when I run the test I receive the error:
java.util.NoSuchElementException:不存在值
java.util.NoSuchElementException: No value present
当我双击错误时,它指向第一个 lambda 的 .get()
方法.
When I double-click the error it points at the .get()
method of the first lambda.
你们中是否有人成功地模拟了一个 lambda 表达式并知道如何解决我的问题?
Have any of you successfully mocked a lambda expression and know how I can solve my problem?
推荐答案
没有必要模拟这么深的调用.只需模拟 personRepo.findAll()
并让 Streaming API 正常工作:
There's no need to mock such deep calls. Simply mock personRepo.findAll()
and let the Streaming API work as normal:
Person person1 = ...
Person person2 = ...
Person person3 = ...
List<Person> people = Arrays.asList(person1, person2, ...);
when(personRepo.findAll()).thenReturn(people);
然后代替
.filter(p -> (p.getEmail().equals(Mockito.any(String.class))))
只需将 Person
对象上的 email
设置/模拟为预期值.
just set/mock email
on your Person
objects to be the expected value.
或者,考虑实现 PersonRepo.findByEmail
.
这篇关于使用 Mockito 2.0.7 模拟 lambda 表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用 Mockito 2.0.7 模拟 lambda 表达式


基础教程推荐
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- 降序排序:Java Map 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01