mockito 시뮬레이션 테스트 프레임워크 소감 1

9570 단어 도구 프레임
mockito는 아주 좋은 아날로그 테스트 프레임워크입니다. 그는 당신의 요구에 따라 아날로그 프레임워크를 생성할 수 있습니다. 이렇게 해서 제 업무에서 많은 문제를 해결했습니다. 예를 들어 단원 테스트를 하고 서비스는dao에 의존합니다. 만약에 제가 서비스 층 방법을 테스트하지만dao의 방법을 사용하면 첫째, 그는 제가 싫어하는 정보를 많이 출력할 것입니다. 하지만 저도log4j를 빈번하게 수정하고 싶지 않습니다. 둘째, 이런 속도는 확실히 느립니다.
그러면 나는 하나의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){}
}

좋은 웹페이지 즐겨찾기