2017-12-13 10 views
1

나는 안드로이드 유닛 테스트를 배우기 시작했으나 좋은 가이드 나 정보를 찾기가 매우 어려워 보입니다. 모든 예는 바보 같은 예를 약 2 + 2 =사용자 정의 SDK 및 안드로이드 유닛 테스트 요소를 테스트하는 방법

4 내가 몇 가지 기능

MySdk.Init(Context context) 
MySdk.CallTask() 

내가

가 어떻게 내 SDK 함수를 호출한다 androidTest 파일을 만들 수있다 조금 SDK 쓰기 말 어떻게 작동하는지 확인하십시오. 어딘가에 int/string/context와 같은 매개 변수가 필요합니다. 나는 정말로 이해하지 못한다. 제발 나를 도와주세요.

이 내가 context = new mockContext();을 시도했다 컨텍스트를 들어

public class AndroidTest { 
    private Activity context; 


//default test 
@Test 
public void addition_correct() throws Exception { 
    assertEquals(4, 2 + 2); 
} 

@Test 
public void checkContext() { 
    context = getActivity(); 
    assertNotNull(context); 
} 

@Test 
public void testInitPhase() { 

    MySdk.Init(context, new SdkInitializationListener() { 
     @Override 
     public void onInitializationSuccessful(String adv_id) { 
      assert (adv_id != null); 
     } 

     @Override 
     public void onInitializationError() { 

     } 
    }); 
} 

}

을 시도했습니다 것입니다. 그것은 context = null으로 전달되고 내 SDK는 초기화에 실패했습니다.

답변

2

단위 테스트는 주로 개별 클래스를 개별적으로 테스트하는 것에 대한 것입니다. 따라서 클래스의 개별 공개 메서드가 의도 한대로 동작하는지 확인하고 나중에 해당 클래스 코드를 변경하면 계속 수행 할 수 있습니다 .

public class UtilityFunctions { 
    public int double(int value) { 
     return value * 2; 
    } 

    public String mirror(String value) { 
     if (value == null) return ""; 
     return value + new StringBuilder(value).reverse().toString(); 
    } 
} 

당신은 이러한 두 가지 방법을 테스트 할 :

  • 유효한 입력 값을, 출력이
  • 잘못된 값을 예상대로 확인하고 검사의는이 같은 클래스가 있다고 가정 해 봅시다 해당 오류가 적절히 처리됩니다 (필요한 경우 올바른 예외가 throw됩니다).

따라서 위의 클래스에 대한 테스트 클래스는 다음과 같이 보일 수 있습니다.

@RunWith(JUnit4.class) 
public class UtilityFunctionsTest { 
    private UtilityFunctions utility; 

    @Before 
    public void setUp() { 
     // Initialises any conditions before each test 
     utility = new UtilityFunctions(); 
    } 

    @Test 
    public void testDoubleFunction() { 
     assertEquals(2, utility.double(1)); 
     assertEquals(8, utility.double(4)); 
     assertEquals(-12, utility.double(-6)); 
     assertEquals(0, utility.double(0)); 
    } 

    @Test 
    public void testMirror() { 
     assertEquals("", utility.mirror(null)); 
     assertEquals("", utility.mirror("")); 
     assertEquals("aa", utility.mirror("a")); 
     assertEquals("MirrorrorriM", utility.mirror("Mirror")); 
    } 
} 

이러한 표준 Java 단위 테스트는 test 디렉토리에서 실행됩니다. 그러나 개의 Android 관련 클래스 (예 : Context)을 사용할 때마다 androidTest 디렉토리에서 테스트를 실행해야합니다. MockContext을 만드는 경우 빈 방법 Context을 만들면 메소드가 아무 것도하지 않습니다.

귀하의 MySDK에 대한 정보를 알고 있지 않으면 시험을 위해 반 기능을 갖춘 Context을 수업에 전달해야 할 수도 있습니다. 당신은 또한 당신의 첫 번째 테스트에서 context = getActivity(); 줄을 제거해야합니다

@Before 
public void setUp() { 
    context = InstrumentationRegistry.getTargetContext(); 
} 

: 귀하의 예를 들어,이 @Before 방법을 추가해야 할 수 있도록 안드로이드 JUnit을 주자는 InstrumentationRegistry.getTargetContext()와 함께이 제공하지 않습니다.

+0

안녕하세요, 답변을 주셔서 감사합니다. 오류가 있습니다 : 해당 항목을 찾을 수 없습니다. InstrumentationRegistry 내가 추가해야 할 항목은 무엇입니까? – Peter

+0

첫째, 테스트 클래스는'androidTest' 폴더에 있습니까? 둘째, 클래스 상단에'@RunWith (AndroidJUnit4.class)'를 가지고 있습니까? ('public class AndroidTest' 위) –

+0

참고 사항 : [계측기 테스트] (https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html) –