网站标题关键词,两个wordpress如何同步的,金华电子商务网站建设,做一下网站需要什么在编写单元测试时 #xff0c;必须牢记不要依赖外部组件。 为了避免这种情况#xff0c;我们使用了模拟框架#xff0c;对我来说#xff0c;最容易使用的是Mockito 。 在本文中#xff0c;我们将看到在Mockito中使用的一种“高级”技术#xff0c;可以使用Answer接口在模… 在编写单元测试时 必须牢记不要依赖外部组件。 为了避免这种情况我们使用了模拟框架对我来说最容易使用的是Mockito 。 在本文中我们将看到在Mockito中使用的一种“高级”技术可以使用Answer接口在模拟方法上返回相同的参数实例。 假设我们正在为管理Person和Job类的类编写单元测试并且在操作中它使用DAO类在Person和Job之间插入关系类MN称为PersonJob 。 例如正在测试的类如下所示 public PersonJob createPersonJob(Person person, Job job) {.. some job .. PersonJob personJob new PersonJob(person, job);return this.personJobDao.create(personJob);} 因此在这种情况下您似乎需要嘲笑personJobDao 。 让我们创建模拟并记录交互 public class WhenAJobIsAssignedToPerson {Testpublic void relationship_should_be_made_persistent() {PersonJobDao personJobDao mock(PersonJobDao.class);when(personJobDao.create(any(PersonJob.class))).thenReturn(???)PersonJobManager personJobManager new PersonJobManager();personJobManager.setPersonJobDao(personJobDao);Person person new Person();Job job new Job();PersonJob personJob personJobManager.createPersonJob(person, job);assertThat(personJob.getPerson(), is(person));assertThat(personJob.getJob(), is(job));}} 是的您可以看到您不知道要返回什么因为实例是由被测类创建的并且在测试方法中您也不知道哪个实例是由createPersonJob方法创建的。 要解决此问题您需要使用thenAnswer而不是thenReturn方法 public class WhenAJobIsAssignedToPerson {Testpublic void relationship_should_be_made_persistent() {PersonJobDao personJobDao mock(PersonJobDao.class);when(personJobDao.create(any(PersonJob.class))).thenAnswer(new AnswerPersonJob() {public PersonJob answer(InvocationOnMock invocation)throws Throwable {return (PersonJob) invocation.getArguments()[0];}});PersonJobManager personJobManager new PersonJobManager();personJobManager.setPersonJobDao(personJobDao);Person person new Person();Job job new Job();PersonJob personJob personJobManager.createPersonJob(person, job);assertThat(personJob.getPerson(), is(person));assertThat(personJob.getJob(), is(job));}} 需要注意的是回答接口需要您实现答案的方法这在我们的情况下简单地返回personJobDao的第一个参数PersonJob实例。 创建方法。 现在我们可以安心编写断言而不必担心返回的实例。 参考在One Jar To Rule Them All博客中与 JCG合作伙伴 Alex Soto的Mockito进行回答 。 翻译自: https://www.javacodegeeks.com/2012/07/answering-with-mockito.html