2011-02-06 13 views
19

Android에서 단위 테스트를 수행하는 방법에는 여러 가지가 있습니다. 내가 작성한 사용자 정의보기를 테스트하는 데 가장 좋은 방법은 무엇입니까?Android : 사용자 정의보기를 테스트하는 방법?

저는 계측기 테스트 케이스에서 필자의 활동의 일부로 테스트 중이지만, 고립 된 뷰를 테스트 해보고 싶습니다.

+0

당신이 '보기를 테스트'가 무엇을 의미합니까? – pkananen

답변

18

웰 유닛 테스트는 소스 코드의 개별 단위를 테스트하여 사용에 적합한 지 판단하는 방법입니다. 따라서 사용자 정의보기를 테스트하려는 경우 "onTouchEvent", "onDown", "onFling", "onLongPress", "onScroll", "onShowPress", "onSingleTapUp"등과 같은 사용자 정의보기의 다양한 방법을 확인할 수 있습니다. "onDraw"및 비즈니스 논리에 따라 다양한 기타 기능을 제공합니다. 모의 값을 제공하고 테스트 할 수 있습니다. 사용자 정의보기를 테스트하는 두 가지 방법을 제안합니다.

1) 원숭이 검사 원숭이 검사는 자동화 된 검사 도구로 수행되는 무작위 검사입니다. 원숭이 테스트는 특정 테스트를 염두에두고 테스트하는 단위 테스트입니다. 이 경우 원숭이는 모든 입력을 생산합니다. 예를 들어 원숭이 테스트는 임의의 문자열을 텍스트 상자에 입력하여 가능한 모든 사용자 입력을 처리하거나 가비지 파일을 제공하여 데이터에 맹목적 인 믿음을 가진 루틴을로드하는지 확인할 수 있습니다. 이것은 블랙 박스 테스팅 기술이며 너무나 많은 독특한 조건에서 사용자 정의보기를 확인할 수 있습니다.

2) 단위 테스트

2A) Robotium.org 또는 http://code.google.com/p/robotium/에 사용 Robotium 단위 테스트 Framwork

이동하여 예를 들어, 테스트 프로젝트를 다운로드합니다. Robotium은 안드로이드 애플리케이션을 쉽고 빠르게 테스트 할 수있는 프레임 워크를 사용하기 쉽습니다. 나는 최소한의 노력으로 고급 안드로이드 애플리케이션을 테스트 할 수 있도록 만들었습니다. ActivityInstrumentationTestCase2와 함께 사용됩니다.

2B)를 사용하여 안드로이드 테스트 프레임 워크 여기

는 참조에 대한 링크는 다음과 같습니다 우선 들어 http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.htmlhttp://developer.android.com/reference/android/test/ActivityUnitTestCase.html

: http://developer.android.com/guide/topics/testing/testing_android.html

한 사용자에 따르면 : 플랫폼 이외의 플랫폼을 쉽게 테스트하는 것 외에도 의존적 인 논리 나는 시험을 실행하는 영리한 방법을 찾지 못했습니다. 지금까지 ( 에서) 실제 플랫폼 로직 테스트는 복잡합니다. 내가 에뮬레이터 내 실제 장치 사이의 구현 에서 발견 차이를했습니다 내가 나중에 응용 프로그램을 제거 단지 에 내 장치에서 단위 테스트 구현을 실행하기 싫어하기 때문에 어쨌든 거의 비 사소한 입니다.

나의 전략은되었습니다 : 간결 하고 논리 잘 밖으로 생각하고 다음 작품으로 구현 피스 (이하 다음 바람직)를 테스트 해보십시오.

또한 스티븐 응 안드로이드 프로젝트 솔루션에 대한 실제 단위 테스트에 대한 좋은 aproach을 제공 https://sites.google.com/site/androiddevtesting/

한 사용자가 스크린 캐스트를했다.

여기에 ScreenCast가 있습니다. 단위 테스트가 어떻게 작동하는지 알아 보았습니다. 단순 단위 컨텍스트 또는 활동 개체에 대한 참조가있는 테스트 및 더 복잡한 단위 테스트 . http://www.gubatron.com/blog/2010/05/02/how-to-do-unit-testing-on-android-with-eclipse/

는 내가 정말 원하는 동안, 모든 가능한 조건 :


코멘트 (futlib) 모든 제안이 활동 테스트를 포함하는 것에 사용자 정의보기를 테스트하는 데 도움이 희망 VIEW를 테스트하십시오. 이 액티비티를 다른 액티비티에서 사용하고 싶을 수 있으므로, 특정 액티비티로 테스트하는 것은별로 의미가 없습니다. - futlib

답변 : 일반적으로 프레임 워크가 모든 뷰에 호출 표준 방법 중 일부 재정의를 제공함으로써 시작됩니다 사용자 정의보기를 구현합니다. 예 : "onDraw", "onKeyDown (int, KeyEvent)", "onKeyUp (int, KeyEvent)", "onTrackballEvent (MotionEvent)"등 사용자 정의보기. 따라서 사용자 정의 단위 테스트를 수행 할 때 은 이러한 방법을 테스트해야하며 은 모의 값을 제공하므로 은 모두 에 사용자 정의보기를 테스트 할 수 있습니다. 이 메서드를 테스트하는 것이 ACTIVITY를 테스트하고 있다는 의미는 아니지만 이 하나의 작업 내에있는 사용자 정의보기 (메서드/함수) 을 테스트하는 것을 의미합니다. 또한 사용자는 사용자가 직접 체험 할 수 있도록 활동에 사용자 지정보기를 추가해야합니다. 을 철저히 테스트하고 나면 사용자 지정보기 을 많은 프로젝트에 배치하고 많은 활동에 배치 할 수 있습니다.

+1

당신의 모든 제안은 ACTIVITY를 테스트하는 것과 관련이 있습니다. VIEW를 테스트하고 싶습니다. 이 액티비티를 다른 액티비티에서 사용하고 싶을 수 있으므로, 특정 액티비티로 테스트하는 것은별로 의미가 없습니다. – futlib

+0

@futlib, 내 대답을 편집하고 더 자세히 설명했습니다. 그것을 확인하시기 바랍니다. –

+0

그건 명확한 일이지만 내 중심 질문은 : 어떤 종류의 테스트 방법을 사용할 수 있습니까? 계측 테스트? 활동이 필요합니다. 아니면 일반 JUnit 테스트? 또는 AndroidTestCase 또는 ApplicationTestCase? – futlib

20

보기 중심 TestCase 구현이 부족한 간단한 해결책은보기가 포함 된 테스트 프로젝트 내에서 간단한 활동을 만드는 것입니다. 이렇게하면 간단한 활동을 사용하여보기에 대해 테스트를 작성할 수 있습니다. 활동 테스트에 대한 정보 : 여기 http://developer.android.com/reference/android/test/ActivityUnitTestCase.html

+0

그래서 나는 "모의"활동을 만들어야 함을 의미합니까? 음, 충분히. – futlib

+0

답의 간결한 버전은 +1입니다. – cdhabecker

13

이 많은 경우에 잘 작동 다른 제안 : 당신은 레이아웃 파일 내에서 사용자 정의보기를 참조하는 가정하면, 다음에, AndroidTestCase을 사용하여보기를 팽창, 수 격리 된 상태에서 테스트를 수행하십시오. 여기에 몇 가지 예제 코드는 다음과 같습니다

my_custom_layout.xml :

<?xml version="1.0" encoding="utf-8"?> 
<de.mypackage.MyCustomView ... 

MyCustomView.자바 :

public class MyCustomView extends LinearLayout { 

    public MyCustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void setTitle(CharSequence title) { 
     ((TextView) findViewById(R.id.mylayout_title_textView)).setText(title); 
    } 
... 

MyCustomViewTest.java :

public class MyCustomViewTest extends AndroidTestCase { 

    private MyCustomView customView; 

    @SuppressLint("InflateParams") 
    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
     customView = (MyCustomView) LayoutInflater.from(getContext()) 
      .inflate(R.layout.my_custom_layout, null); 
    } 

    public void testSetTitle_SomeValue_TextViewHasValue() { 
     customView.setTitle("Some value"); 
     TextView titleTextView = (TextView) valueSelection.findViewById(R.id.mylayout_title_textView); 
     assertEquals("Some value", titleTextView.getText().toString()); 
    } 
... 
+0

'TextView의'valueSelection'은 무엇입니까? titleTextView = (TextView) valueSelection.findViewById (R.id.mylayout_title_textView);'? – beerBear

+0

솔직히 (너무 오래 전부터) 확신 할 수는 없지만 오타라고 생각합니다. 아마도'customView' (TextView를 포함하고있을 것입니다) 일 것입니다. – csoltenborn

관련 문제