mockito 시뮬레이션 테스트 프레임워크 소감 1
9570 단어 도구 프레임
그러면 나는 하나의dao 대상이 나오는 것을 모의할 수 있고 미리 설정할 수 있다. 너의dao 대상 호출 방법은 어떤 값을 되돌려주느냐. 그러면 내가dao 대상을 만들면dao 대상을 실제로 만들지는 않을 것이다. 그러나 나는 어떤 방법의 되돌림 값을 미리 설정해서 클래스를 테스트해서 사용하도록 했다. 이렇게 하면 내가 필요로 하는 효과를 얻을 수 있다.
나는 내가 배우고 연습한 코드를 다음과 같이 붙였다.
package testmock;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class Test01 {
// mock , , , , , , new , , set , get , , , ! get , test
@Test
public void test01() {
//
Iterator i = mock(Iterator.class);
// next hello, world
when(i.next()).thenReturn("Hello").thenReturn("World");
// next ,
String result = i.next() + " " + i.next();
// i times 2
verify(i, times(2)).next();
}
// , , ,
@Test
public void test02() {
// list
List mock = mock(List.class);
// when().thenReturn() , , , 、 …… n
when(mock.get(1)).thenReturn("abcd").thenReturn("eeee").thenReturn("dddd");
//
Object object = mock.get(1);
System.out.println(object);
//
verify(mock).get(1);
// mock.get(3) ,
// null, null
Object object2 = mock.get(3);
System.out.println("mock.get(3) 3, , :" + object2);
}
// , ,
@Test
public void test03() {
// arraylist
ArrayList mock = mock(ArrayList.class);
// set 、get , , , mock ,
mock.set(1, "aa");
// null
System.out.println(mock.get(1));
// mockito
// get num1, num2, :stubbing, 。
when(mock.get(0)).thenReturn("num1").thenReturn("num2");
// ,
System.out.println(mock.get(0));
// , get(0) , ,
verify(mock).get(0);
// 2 mock.get(0) ,
mock.get(0);
System.out.println(" 2 get(0) ");
//
// verify(mock).get(0);
// , 2 get(0) , :
verify(mock, times(2)).get(0);
}
/*
* , mock , ,mockito 。 /
* : 123, "abcdString" /
* ,mockito :anyInt: int ,anyString: , ,
* anyXxx , :8 , ,Object、Class ,
* Matchers !
*/
@Test
public void test04() {
// map
HashMap mock = mock(HashMap.class);
//
when(mock.get(anyString())).thenReturn(" ").thenReturn(" ");
// anyString mock.get() ,
// , value1,anyString()
String string = mock.get("value1");
// :
System.out.println(string);
// , value2,anyString()
string = mock.get("value2");
// :
System.out.println(string);
}
// , , , , , , mockito eq(), , N
@Test
public void test05() {
// hashMap
HashMap mock = mock(HashMap.class);
// value , map value : value
// ,
// ,anyXxx() , eq() , anyString eq, , :anyString() 。
when(mock.get(anyString())).thenReturn(" ");
when(mock.get(eq("value1"))).thenReturn(" value ");
when(mock.get(eq("value2"))).thenReturn("value2 ");
//
//
System.out.println(mock.get("aaa"));
System.out.println(mock.get("value1"));
System.out.println(mock.get("value2"));
}
// , anyString(), verify() , anyString()
@Test
public void test06() {
HashMap mock = mock(HashMap.class);
when(mock.get(anyString())).thenReturn(" ");
System.out.println(mock.get("aaa"));
// , anyString() 。
verify(mock).get(anyString());
}
// : , , add ,a 1 ,bb 2 ,cc 3
@Test
public void test07() {
//
ArrayList mock = mock(ArrayList.class);
mock.add("aa");
mock.add("bb");
mock.add("bb");
mock.add("cc");
mock.add("cc");
mock.add("cc");
// ,verity :mock ,time( )
// aa add 1
verify(mock, times(1)).add("aa");
// bb add 2
verify(mock, times(2)).add("bb");
// cc add 3
verify(mock, times(3)).add("cc");
// time() , time(1)
// verify(mock ).add("cc");// 3 ,
verify(mock).add("aa");// 1 ,
// add , never() , , :
// verify(mock, never()).add("aa"); // , aa
verify(mock, never()).add(" add ");
//
//
verify(mock, atLeastOnce()).add("bb");
// , bb 2, 3
verify(mock, atLeast(2)).add("bb");
// , cc 5
verify(mock, atMost(3)).add("cc");
}
// Answer
@Test
public void test08() {
HashMap mock = mock(HashMap.class);
when(mock.get(anyString())).thenAnswer(new Answer() {
public String answer(InvocationOnMock invocation) throws Throwable {
// invocation
Object[] arguments = invocation.getArguments();
//
for (Object object : arguments) {
System.out.println(object);
}
// , ,
return " :" + arguments[0].toString();
}
});
// object
Object object = mock.get("abcd");
System.out.println(object);
//
verify(mock).get(anyString());
}
//doThrow(),doAnswer(),doNothing(),doReturn() doCallRealMethod()
@Test
public void test09() {
List mock = mock(List.class);
// doReturn doAnswer when(mock.get(x)).thenXxxxx(),
doThrow(new RuntimeException()).when(mock).get(1);
doReturn("abcd").when(mock).get(2);
// , , 。
}
//
@Test
public void test10(){
Person mock = mock(Person.class);
when(mock.method()).thenCallRealMethod();
String method = mock.method();
System.out.println(method);
method = mock.method();
System.out.println(method);
}
// , , , doNothing void , 。
// , , , , 。
@Test
public void test11(){
Person mock = mock(Person.class);
doNothing().doThrow(new RuntimeException()).when(mock).method2();
mock.method2();
System.out.println(" ");
mock.method2();
}
// , mock , , , mock
@Test
public void test12(){
//
ArrayList arrayList = new ArrayList();
ArrayList spy = spy(arrayList);
//
when(spy.size()).thenReturn(100);
System.out.println(spy.size());
// , , spy
spy.add(" 1 ");
spy.add(" 2 ");
spy.add(" 3 ");
System.out.println(spy.get(0));
System.out.println(spy.get(1));
System.out.println(spy.get(2));
}
// ,
@Test
public void test13(){
ArrayList arrayList = new ArrayList();
ArrayList spy = spy(arrayList);
// , , ,
// when(spy.get(0)).thenReturn("abcd");
// spy.get(0);
//
doReturn("abcd").when(spy).get(0);
String string = spy.get(0);
System.out.println(string);
}
// , , ,
@Test
public void test14(){
List mock1 = mock(List.class);
List mock2 = mock(List.class);
// , , , , :
mock1.add("abcd");
//
System.out.println(mock1.get(0));
// , add ?
//
ArgumentCaptor ac = ArgumentCaptor.forClass(List.class);
// , , add ,
verify(mock1).add(ac.capture());
// ,
System.out.println(ac.getValue());
// 2 add ,
mock2.add("AAAA");
mock2.add("BBBB");
verify(mock2 , times(2)).add(ac.capture());
for (Object object : ac.getAllValues().toArray()) {
System.out.println(object );
}
// , :
Person mock = mock(Person.class);
mock.method3("str1", "str2");
ArgumentCaptor ac2 = ArgumentCaptor.forClass(String.class);
verify(mock).method3(ac2.capture(),ac2.capture());
for (Object object : ac2.getAllValues().toArray()) {
System.out.println(object);
}
}
}
class Person{
public String method(){
return "Person";
}
void method2(){
System.out.println("method2");
}
void method3(String str1,String str2){}
}