반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

야후 뉴스에 보도된 전두환 비자금 관련 기사입니다.

영어 공부도 할겸 번역해 봤어요.


SKorea hunts for ex-dictator's slush money: $143M

 

 

 

 


반응형


반응형

 

이곳 미국 샌디에고에서 국정원 불법선거 규탄 시위가 있었습니다.

용감한 두 여성분들이 피켓 시위를 하셨는데요.

이곳 시간으로 6월 22일 오후 2시부터 1시간 가량 진행하신것 같더라구요.

 

 

민주주의를 지탱하는 가장 핵심적인 이벤트인 선거.. .그것도 대통령 중심제인 우리나라에서 대통령선거를 국가 최고의 정보기관인 국정원을 동원해서 불법선거를 자행하고 또 최고 권력기관중 하나인 경찰이 그 불법을 무마하고 증거를 인멸한 행위는 용서받을 수 없는 범죄 행위입니다.

 

이런 범죄 행위를 명명 백백하게 밝히도록 해서 절대 재발 하지 않도록 하는 것이 대통령의 역할인데 박근혜는 오히려 국정원과 경찰의 민주주의 근간을 흔드는 불법행위에 대해 침묵으로 일관하고 더 나아가 전직 대통령의 정상회담 발언록까지 공개토록하는 말도 안되는 짓을 저지르면서 국민을 호도하려고 하고 있습니다.

 

예전에 글에서도 밝혔듯이 친일파의 딸 그리고 구테타로 정권을 잡고 민주를 짓밟은 독재자의 딸 박근혜에게 기대하는건 없었습니다. 역시나 아버지 따라서 민주를 짓밟는 이런 만행을 저지르고야 마는 군요.

 

이곳 먼 미국 그것도 캘리포니아 남단에 있는 샌디에고(San Diego) 에서도 조국의 현실에 가슴아파하고 조금이라도 힘을 보태서 잘못되지 않도록 바로 잡고 싶어하는 분들이 많이 있습니다.

 

피로 찾은 민주주의 다시 후퇴시킬 수 없습니다. 더군다나 독재자 박정희의 딸로 인해서 다시 후퇴하도록 할 수 없습니다.

 

한국에서도 많은 움직임이 있던데 힘껏 국민의 의무를 다 합시다.

 

 

반응형

Mockito로 테스트 하기

2013. 6. 17. 08:06 | Posted by 솔웅


반응형

오늘은 Lars Vogel 라는 친구가 작성한 Mockito 튜토리얼을 공부했습니다. 2012년 6월에 작성해서 2013는 2월에 Revision 됐으니까 아주 최근 글이네요. Mockito 에 대한 기본 설명과 예제가 있고 예제는 안드로이드 프로젝트에서 사용할 때의 예제를 보여 줍니다.

글 제목을 클릭하시면 원본이 있는 페이지로 가실 수 있습니다. 고맙게 자신이 어렵게 얻은 지식을 이렇게 공유해 주고 있는 친구에게 도움을 주는게 기본 예의 아닐까 합니다. 해당 페이지에는 Donation 할 수 있는 링크도 있고 광고도 있으니까 이 중 할 수 있는 방법으로 도움을 주실 수 있을 거예요. :)

 

Testing with Mockito - Tutorial

Lars Vogel

 

 


Version 1.1

02.05.2013


Testing with Mockito

이 튜토리얼은 이클립스에서 모키토 프레임워크로 테스트 하는 방법을 설명하고 있습니다.


 


1. Prerequisites

아래 튜토리얼은 JUnit 프레임워크로 단위테스트하는 것을 기반으로 작성했습니다.

JUnit 를 잘 모르신다면 JUnit Tutorial 를 참조하세요.

 


2. Testing with mock objects


Unit testing은 클래스나 메소드별로 별도로 테스팅하는 것을 말합니다.


자바 클래스들은 대개 다른 클래스들에 의존 합니다. mock object는 특정 메소드 호출에 어떤 output을 정의한 인터페이스나 클래스에 대한 dummy implementation을 말합니다. Mock object들은 dependency 없이 테스트 되어야 하는 클래스에 대한 단위테스트를 만들 때 유용하게 사용됩니다.


코드를 작성해서 이 mock object들을 생성하거나 이 클래스들을 simulate 하기 위해 mock framework을 사용할 수 있습니다. Mock frameworks는 runtime에 mock object들을 생성할 수 있도록 하고 그 behavior를 정의할 수 있도록 해 줍니다.

mock object에 대한 고전적인 예제는 data provider를 들 수 있습니다.  production에서는 실제 데이터베이스가 사용되지만 테스팅에서는 mock object를 사용해서 데이터베이스를 simulate 해야 합니다. 실제 데이터베이스를 사용할 때와 똑같은 상황을 만들어 놓고 테스트를 해야 되는 거죠.

이 mock object들은 테스트 될 클래스에 제공될 수 있습니다. 그래서 테스트 해야할 클래스가 외부 데이터에 대한 의존(dependency) 없이 동작하고 그 결과를 테스트 할 수 있습니다.

Mock frameworks는 또한 mock object 와의 상호작용(interaction)을 가능하게 해 그에 따른 테스트를 진행할 수 있도록 합니다. 예를 들어 mock object에 의해 call 된 메소드를 테스트를 하는 경우가 이 경우가 되겠죠.


 


3. Mockito


3.1. The Mockito testframework

Mockito 프레임워크에 대해서는 Mockito homepage 에 가시면 자세한 내용을 보실 수 있습니다.

Mockito 는 여러분에게 항상 mock objects를 생성할 수 있도록 기능을 제공합니다. 이 mock objects들은 method를 호출할 때 Pass 되도록 할 수 있어 그 메소드를 테스트 할 수 있도록 도와 줍니다.

 

3.2. Using Mockito

Mockitomock() 메소드를 call 해서 생성하거나 @Mock annotation에 근거해서 생성할 수 있습니다. annotation이 사용됐다면 MockitoAnnotations.initMocks(this) method call을 사용해서 초기화 해야 합니다.

아래의 예제를 보세요.

 

public static Intent createQuery(Context context, String query, String value) {
    Intent i = new Intent(context, MyListActivity.class);
    i.putExtra("QUERY", query);
    i.putExtra("VALUE", value);
    return i;
  } 

 

이 메소드는 Context 에 대해 mock object를 만들어서 테스트 할 수 있습니다.

 

package com.vogella.android.mockito.intent.test;

import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.test.AndroidTestCase;

import com.vogella.android.mockito.intent.MainActivity;

public class MainActivtityTest extends AndroidTestCase {
  @Mock
  Context context;

  @Override
  protected void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
  }

  public void testQuery() throws Exception {
    Intent intent = MainActivity.createQuery(context, "query", "value");
    assertNotNull(intent);
    Bundle extras = intent.getExtras();
    assertNotNull(extras);
    assertEquals("query", extras.getString("QUERY"));
    assertEquals("value", extras.getString("VALUE"));
  }
} 

Note

이 예제 코드는 단지 간단한 사용법을 보여 드리기 위한 겁니다. 이 예제는 안드로이드 프로그래밍을 예로 들었습니다. Android 에서 Mockito를 direct 하게 사용할 수 있습니다.

Tip

Static imports allows you to call static members, i.e. methods and fields of a class directly without specifying the class. If you declare Mockito.* as static member you can access methods like mock() directly.

 

 

Mockito 에는 아주 훌륭한 API 가 있습니다. verify() method 를 사용해서 해당 메소드가 호출 됐는지 여부를 확인 할 수 있습니다.

when(....)thenReturn(....) 를 사용하면 특정 상황에서의 return 값을 정해 줄 수 있습니다.

doReturn(object).when(kdskfsk).methodCall 도 비슷한 일을 합니다.

특정 상황을 체크하기 위해 mock object에 verify() method 를 사용해도 됩니다.

@Spy 나 spy() method 는 real object를 wrap 하기 위해 사용할 수 있습니다. Every call, unless specified otherwise is delegated to the object.

 

// Lets mock a LinkedList
List list = new LinkedList();
List spy = spy(list);

//You have to use doReturn() for stubbing
doReturn("foo").when(spy).get(0);

// this would not work
// real method is called so spy.get(0)
// throws IndexOutOfBoundsException (list is still empty)
when(spy.get(0)).thenReturn("foo");

 

verifyNoMoreInteractions()는 더이상의 메소드 호출이 없음을 체크할 수 있도록 합니다.

 


4. Mockito on Android

release 1.9.5 Mockito 부터 Android 에서 direct로 사용할 수 있도록 됐습니다. 안드로이드 테스트 프로젝트에서 Mockito를 사용하려면 안드로이드 테스트 프로젝트의 libs 폴더에 아래 세개의 라이브러리를 추가 하시면 됩니다.

https://mockito.googlecode.com/files/mockito-all-1.9.5.jar
http://dexmaker.googlecode.com/files/dexmaker-1.0.jar
http://dexmaker.googlecode.com/files/dexmaker-mockito-1.0.jar 


 

5. Thank you

이 글이 괜찮으시다면 도움을 주세요.

여기 로 가시면 도움을 주실 수 있는 방법이 있습니다.


6. Questions and Discussion

질문을 올리시기 전에vogella FAQ 를 먼저 보시면 도움이 되실 겁니다. 이 글을 보시고 질문이 있으시거나 에러를 발견하셨다면 www.vogella.com Google Group를 이용해 주세요. how to create good questions 도 만들었습니다. 이 글을 보시면 여로분께 도움이 되실 겁니다.

 

7. Links and Literature  

7.1. EasyMock

EasyMock Homepage



반응형