2016-06-16 2 views
2

현재 Intent 엑스트라에 대해 조금 혼란 스럽습니다. 소위 엑스트라가 Bundle이고 Bundle 이 내부적으로지도라는 것을 알고 있습니다.단순한 의도 - jUnit 테스트가 실패했습니다.

그리고이지도에 무언가를 넣으면 intent.putExtra("someName", "someValue");과 함께지도에 "someName"이라는 키가 있다고 예상됩니다. 그러나 그것은 매우 단순한 단위 테스트에 따르면 아닙니다. 다음에

public void testIntent(){ 
    assertTrue("true != true", true); 
    assertFalse("false != false", false); 

    final String extraName = "IamAnExtra"; 
    final String extraValue = "IamAValue"; 
    Intent intent = new Intent(); 
    intent.putExtra(extraName, extraValue); 

    assertTrue("hasExtra==false", intent.hasExtra(extraName)); 
    } 

이제 THS 결과 :

의도 코드 뒤에 무슨 일이 일어나고 마법 어떤 종류의
junit.framework.AssertionFailedError: hasExtra==false 

? 정상적으로 작동하는 것을 알고 있습니다. 지도를 캐시하고 을 보내야합니까? 미리 감사드립니다.

편집 :

는 또한 실패 라인 assertNotNull("extras == null", intent.getExtras());을 추가했습니다.

그리고는 방법 putExtragetExtras에서 코드 검사 : 멤버 mExtras가 null의 경우

public Intent putExtra(String name, String value) { 
    if (mExtras == null) { 
     mExtras = new Bundle(); 
    } 
    mExtras.putString(name, value); 
    return this; 
    } 

public Bundle getExtras() { 
    return (mExtras != null) 
      ? new Bundle(mExtras) 
      : null; 
    } 

그래서는, null가 getExtras 반환됩니다. 그러나 putExtra는 mExtras에 대한 새 Bundle 인스턴스를 만들므로 mExtras 이어야하며이 null이 아니어야합니다. 나는 혼란스러워.

+0

_unit test_ 또는 _instrumented test_로 실행하고 있습니까? JUnit 4는 어떤 프레임 워크를 사용하고 있습니까? – josemigallas

+0

단위 테스트. 나는 보통의 TestCase를 사용했다. – JacksOnF1re

+0

나는 보통의 인 텐트를 사용하는 것이 좋은 오래된 유닛과 함께 사용하는 것이 좋다고 생각했다. 나는 그것을 보내려고하지 않을 것이다. – JacksOnF1re

답변

1

문제는 당신이 보통 Unit Test을 사용하여 Android SDK에서 테스트하려고한다는 것입니다. Android의 단위 테스트는 mockito과 같은 일부 조롱 라이브러리와 일반 Java 코드를 사용하여 앱 로직에만 사용해야합니다.

Instrumented Test 옵션을 사용하여 실제 장치에서 그 의도를 조롱하거나 테스트를 구현해야합니다.

귀하는 explanation why here입니다.

편집 :

엔트리가 참조이 Gradle을 플래그 :

testOptions { 
     unitTests.returnDefaultValues = true 
    } 

는 테스트가 경고 예외없이 실행 할 수 있지만, SDK를 사용하여 당신이 할 수 없습니다. 사실 Intent을 인스턴스화하면 null 참조가 아닌 다른 것을 얻게됩니다. 결국 어설 션 intent.hasExtra(...)은 사실 일 수 없습니다.

+0

jose에게 감사드립니다. 나는 모든 참고 문헌을 읽고 내일 스스로 시험하고 대답을 받아 들일 것입니다. – JacksOnF1re

관련 문제