Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有可能“以某种方式”;持有;当…然后在temp变量中构造时Mockitos的返回值?_Java_Model View Controller_Mockito - Fatal编程技术网

Java 是否有可能“以某种方式”;持有;当…然后在temp变量中构造时Mockitos的返回值?

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); }

我有一个ServiceClass和一个RepositoryClass,从服务中我想测试一个(真实的)方法,我想模拟存储库

我举个例子:

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())