Java 是否有可能“以某种方式”;持有;当…然后在temp变量中构造时Mockitos的返回值?
我有一个ServiceClass和一个RepositoryClass,从服务中我想测试一个(真实的)方法,我想模拟存储库 我举个例子:Java 是否有可能“以某种方式”;持有;当…然后在temp变量中构造时Mockitos的返回值?,java,model-view-controller,mockito,Java,Model View Controller,Mockito,我有一个ServiceClass和一个RepositoryClass,从服务中我想测试一个(真实的)方法,我想模拟存储库 我举个例子: class PersonService { private final PersonRepository personRepository; public void manipulateData(Person p){ p.setName("Martin"); personRepository.save(p); }
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构造可能吗?
当模拟存储库中的服务方法没有返回值,并且数据库是获取该对象并验证其正确性的唯一场所时,还有什么其他方法可以使用模拟存储库来测试这些服务方法?您可以使用ArgumentCaptor 您可以定义如下所示的捕获者:
@Captor
private ArgumentCaptor<Person> personCaptor;
最后,您可以使用捕获的值进行断言,如:
assertEquals("Martin", personCaptor.getValue().getName())
参考资料:您已经获得了对
p
的参考资料,因此您将只看到personService对其所做的更改。
assertEquals("Martin", personCaptor.getValue().getName())