是否有可能以某种方式 "hold" Mockitos 的 return-value when...then construct in a temp-variable?
Is it possible to somehow "hold" the return-value of Mockitos when...then construct in a temp-variable?
我有一个 ServiceClass 和一个 RepositoryClass,我想从 Service 测试一个(真实的)方法,我想模拟 Repository。
我举个例子:
class PersonService {
private final PersonRepository personRepository;
public void manipulateData(Person p){
p.setName("Martin");
personRepository.save(p);
}
}
现在我想验证 serviceClass 是否按预期操作了我的对象。为此,我想执行以下操作:
@Mock
PersonRepository personRepository;
PersonService personService;
Person p = new Person("Josef");
when(personRepository.save(any())).***thenStoreThisValueInMyTempFieldAbove***
personService.manipulateData(p);
when(personRepository.find(any()).thenReturn(p);
assertThat(p.getName).equals("Martin");
是否可以像我的 when...then-construct 这样的东西?
当服务方法没有 return 值并且数据库是获取该对象并验证其正确性的唯一位置时,还有什么其他方法可以使用模拟存储库测试服务方法?
您可以使用 ArgumentCaptor。
您可以像下面这样定义捕获器:
@Captor
private ArgumentCaptor<Person> personCaptor;
然后您可以在调用您的 repo 方法时捕获该值。
when(personRepository.save(personCaptor.capture()));
最后你可以使用捕获的值来断言:
assertEquals("Martin", personCaptor.getValue().getName())
我有一个 ServiceClass 和一个 RepositoryClass,我想从 Service 测试一个(真实的)方法,我想模拟 Repository。
我举个例子:
class PersonService {
private final PersonRepository personRepository;
public void manipulateData(Person p){
p.setName("Martin");
personRepository.save(p);
}
}
现在我想验证 serviceClass 是否按预期操作了我的对象。为此,我想执行以下操作:
@Mock
PersonRepository personRepository;
PersonService personService;
Person p = new Person("Josef");
when(personRepository.save(any())).***thenStoreThisValueInMyTempFieldAbove***
personService.manipulateData(p);
when(personRepository.find(any()).thenReturn(p);
assertThat(p.getName).equals("Martin");
是否可以像我的 when...then-construct 这样的东西? 当服务方法没有 return 值并且数据库是获取该对象并验证其正确性的唯一位置时,还有什么其他方法可以使用模拟存储库测试服务方法?
您可以使用 ArgumentCaptor。
您可以像下面这样定义捕获器:
@Captor
private ArgumentCaptor<Person> personCaptor;
然后您可以在调用您的 repo 方法时捕获该值。
when(personRepository.save(personCaptor.capture()));
最后你可以使用捕获的值来断言:
assertEquals("Martin", personCaptor.getValue().getName())