12637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin/* 22637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * Copyright (c) 2007 Mockito contributors 32637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin * This program is made available under the terms of the MIT License. 42637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin */ 52637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 62637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpackage org.mockitousage.stubbing; 72637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 82637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.junit.Test; 92637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockito.internal.stubbing.answers.ClonesArguments; 102637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport org.mockitoutil.TestBase; 112637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 122637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport java.util.List; 132637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 142637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static junit.framework.TestCase.assertNotNull; 152637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinimport static org.mockito.Mockito.*; 162637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 172637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffinpublic class CloningParameterTest extends TestBase { 182637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 192637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin @Test 202637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public void shouldVerifyEvenIfArgumentsWereMutated() throws Exception { 212637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 222637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin // given 232637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin EmailSender emailSender = mock(EmailSender.class, new ClonesArguments()); 242637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 252637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin // when 262637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin businessLogic(emailSender); 272637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 282637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin // then 292637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin verify(emailSender).sendEmail(1, new Person("Wes")); 302637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 312637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 322637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private void businessLogic(EmailSender emailSender) { 332637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin Person person = new Person("Wes"); 342637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin emailSender.sendEmail(1, person); 352637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin person.emailSent(); 362637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 372637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 382637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin @Test 392637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public void shouldReturnDefaultValueWithCloningAnswer() throws Exception { 402637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 412637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin // given 422637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin EmailSender emailSender = mock(EmailSender.class, new ClonesArguments()); 432637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin when(emailSender.getAllEmails(new Person("Wes"))).thenAnswer(new ClonesArguments()); 442637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 452637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin // when 462637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin List<?> emails = emailSender.getAllEmails(new Person("Wes")); 472637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 482637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin // then 492637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin assertNotNull(emails); 502637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 512637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 522637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public class Person { 532637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 542637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private final String name; 552637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private boolean emailSent; 562637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 572637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public Person(String name) { 582637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin this.name = name; 592637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 602637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 612637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public void emailSent() { 622637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin emailSent = true; 632637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 642637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 652637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin @Override 662637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public int hashCode() { 672637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin final int prime = 31; 682637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin int result = 1; 692637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin result = prime * result + getOuterType().hashCode(); 702637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin result = prime * result + (emailSent ? 1231 : 1237); 712637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin result = prime * result + ((name == null) ? 0 : name.hashCode()); 722637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return result; 732637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 742637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 752637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin @Override 762637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public boolean equals(Object obj) { 772637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (this == obj) 782637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return true; 792637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (obj == null) 802637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return false; 812637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (getClass() != obj.getClass()) 822637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return false; 832637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin Person other = (Person) obj; 842637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (!getOuterType().equals(other.getOuterType())) 852637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return false; 862637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (emailSent != other.emailSent) 872637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return false; 882637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (name == null) { 892637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin if (other.name != null) 902637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return false; 912637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } else if (!name.equals(other.name)) 922637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return false; 932637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return true; 942637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 952637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 962637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin private CloningParameterTest getOuterType() { 972637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin return CloningParameterTest.this; 982637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 992637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 1002637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 1012637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 1022637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin public interface EmailSender { 1032637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 1042637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin void sendEmail(int i, Person person); 1052637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 1062637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin List<?> getAllEmails(Person person); 1072637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin 1082637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin } 1092637d96c202372854a7c71466ddcc6e90fc4fc53Paul Duffin} 110