Mockito.mock(null)
Weshalb sollte das sinn machen?
Mockito.when(null).thenReturn(meinObjekt)
bedeutet eigentlich: Liebes Mockito. Nimm den letzten Aufruf auf irgend einem Mock. Wenn irgendwann derselbe Aufruf mit denselben Parametern gemacht werden sollte, dann gib „meinObjekt“ zurück.
Dies wird unten demonstriert.
import org.mockito.Mockito;
import java.util.Objects;
/**
* Demonstrates how Mockito.when(null) can be used to tell Mockito to
* return a given value if objects equals to given ones are passed to the mocked method
*/
public class HPTest {
public static void main(String[] args) {
MyObj mockedObject = Mockito.mock(MyObj.class);
/* Tell Mockito, that if get1() is called, then return "super cool string 1.1"*/
mockedObject.get1();
Mockito.when(null).thenReturn("super cool string 1.1");
mockedObject.get2();
Mockito.when(null).thenReturn("super cool string 2");
System.out.println(mockedObject.get1());
System.out.println(mockedObject.get1());
System.out.println(mockedObject.get2());
System.out.println(mockedObject.toString());
/* Tell Mockito, that if return1("1") is called, then return "Return 1" */
mockedObject.return1("1");
Mockito.when(null).thenReturn("Return 1");
/* but if return1("2") is called, then return "Return 2" */
mockedObject.return1("2");
Mockito.when(null).thenReturn("Return 2");
System.out.println(mockedObject.return1("1"));
System.out.println(mockedObject.return1("2"));
System.out.println(mockedObject.return1("2"));
System.out.println(mockedObject.return1("1"));
mockedObject.returnOnObj(new Bohne("A"));
Mockito.when(null).thenReturn("On Obj A");
mockedObject.returnOnObj(new Bohne("B"));
Mockito.when(null).thenReturn("On Obj B");
System.out.println(mockedObject.returnOnObj(new Bohne("A")));
System.out.println(mockedObject.returnOnObj(new Bohne("B")));
System.out.println(mockedObject.returnOnObj(new Bohne("B")));
System.out.println(mockedObject.returnOnObj(new Bohne("A")));
}
}
class MyObj {
public String get1(){return "not mocked 1";}
public String get2(){return "not mocked 2";}
public String return1(String in){return "not mocked";}
public String returnOnObj(Bohne in){return "not mocked";}
}
class Bohne {
public String id;
public Bohne(String id) {
this.id = id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Bohne)) return false;
Bohne bohne = (Bohne) o;
return Objects.equals(id, bohne.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
/*
Output:
super cool string 1.1
super cool string 1.1
super cool string 2
Mock for MyObj, hashCode: 650023597
Return 1
Return 2
Return 2
Return 1
On Obj A
On Obj B
On Obj B
On Obj A
Process finished with exit code 0
*/