2012-01-12 2 views

답변

6

단위 테스트 개인 방법, 그냥 조금 틀린 소리. 공용 및 보호 된 메서드는 단위 테스트를위한 후보입니다. private 메소드를 테스트하기 위해서 메소드를 public으로 만들거나 private 메소드를 호출하는 public 메소드에 대해 더 많은 테스트를 생성하고 private 메소드의 핵심 기능을 테스트 할 수 있습니다.

+1

나는 rfsk2010에 동의합니다. 공용 메서드를 통해 모든 것을 테스트하는 것이 너무 많은 작업 인 경우 클래스가 너무 크고 작업이 너무 많은 코드 냄새가 될 수 있습니다. 이 시점에서 코드를 단일 책임이있는 클래스로 분리 할 수 ​​있습니다. 때때로 이러한 클래스를 재사용 할 수 있으며 단원 테스트를 훨씬 쉽게 할 수 있습니다. – Scott

+0

@downvoter. 제발 downvote에 대한 이유를 설명하십시오 – rfsk2010

+1

그것은뿐만 아니라 내부 방법을 테스트 할 수있는 좋은 것입니다. 계약에 의한 프로그래밍으로 귀하의 권리가 생기지 만, 프로그래밍은 나누기와 분리 (conqueer)를 기반으로하므로 비공개 또는 보호 된 방법을 테스트하지 않으려는 이유가 없습니다. 당신이 준 이유가 너무 제한적이어서 개발자들이 표현한 모든 요구를 충족시키지 못했습니다. – Snicolas

1

안녕하세요. blog article about this topic을 게시하고 Java 패키지와 AndroidManifest "패키지"의 차이점을 이해하여 내부 메소드를 테스트하는 방법을 보여줍니다.

우리는 Java에서 전통적으로했던 것과 똑같은 트릭을 사용하게 될 것입니다. 테스트 할 메소드를 보호해야합니다.

도움이 되었기를 바랍니다.

2

1 년 후에도 개인 방법과 필드 테스트에 도움이되는 라이브러리를 제공했습니다. 나는 안드로이드에서 개인적인 방법을 테스트 할 필요가 있다고 생각한다.

당신은 다른 클래스가 접근 할 수 있다고 생각하지 못하도록 당신의 액티비티 메소드를 비공개로 만들고 싶습니다. (프래그먼트가 될 수는 있지만 그건 틀린 연습입니다. 관찰 가능한 옵저버 패턴을 사용하는 것이 낫습니다.) 그런 다음 테스트로만 액세스해야하는 개인 필드와 메소드로 끝납니다.

BoundBox 정확히 일치합니다. 여기서 아래 활동 2 개 전용 필드를 테스트하기 위해 액세스하는 시험의 예이다 : 테스트 프레임 워크 전용 방법을 테스트

@UiThreadTest 
public void testCompute() { 
    // given 
    boundBoxOfMainActivity = new BoundBoxOfMainActivity(getActivity()); 

    // when 
    boundBoxOfMainActivity.boundBox_getButtonMain().performClick(); 

    // then 
    assertEquals("42", boundBoxOfMainActivity.boundBox_getTextViewMain().getText()); 
} 
+0

과 같은 테스트 메소드 프레임 워크에서 볼 수 있습니다. Snicolas에게 감사드립니다. BoundBox를 살펴 보겠습니다. – Sachchidanand

2

가장 적절한 법적 방법 메소드 위에 주석 @VisibleForTesting되어, 동일한 메소드는 public 메소드처럼 테스트 프레임 워크에서 볼 수 있습니다. 여기에 Official link for VisibleForTesting annotation

+0

이것은 클리너처럼 보입니다. 접근 방식으로 실제 시스템을 테스트 제한으로 변경하지 않아야합니다. 그것을 시도하지 않았지만 왜 다른 많은 사람들이 대답을 준지 궁금해하지 마십시오 – rgv

+0

사적인 방법을 테스트하는 소리가 깨끗한 방법. 그것을 시도 할 것이다. 감사 :) – Sachchidanand