2010-03-20 7 views
1

Android의 RelativeLayout에 대한 단위 테스트를 작성하려고합니다. 현재 내 testcode 설정은 다음과 같습니다Android의 RelativeLayout 단위 테스트 설정

public class SampleRelativeLayoutTest extends AndroidTestCase { 

private ViewGroup testView; 

private ImageView icon; 
private TextView title; 


@Override 
protected void setUp() throws Exception { 
    super.setUp(); 
    // inflate the layout 
    final Context context = getContext(); 
    final LayoutInflater inflater = LayoutInflater.from(context); 
    testView = (ViewGroup) inflater.inflate(R.layout.sample_layout, 
      null); 
    // manually measure and layout 
    testView.measure(500, 500); 
    testView.layout(0, 0, 500, 500); 
    // init variables 
    icon = (ImageView) testView.findViewById(R.id.icon); 
    title = (TextView) testView.findViewById(R.id.title); 
} 

그러나, 나는 다음과 같은 스택 추적 제가 제대로 테스트 실행을 만들기 위해() 코드 내 설정에서 변경해야합니까

java.lang.NullPointerException 
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:427) 
at android.view.View.measure(View.java:7964) 
at com.dqminh.test.view.SampleRelativeLayoutTest.setUp(SampleRelativeLayoutTest.java:33) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447) 

와 NullPointerException이 발생?

+0

이것은 내게 매력적이었습니다. http://stackoverflow.com/a/6086510/1293704 – Primoz990

답변

1

나는 안드로이드 소스의 복사본을 가지고있다. 그러나 당신이 사용하고있는 것과 같은지 확실하지 않다. (또는이 클래스에서는 중요하지 않다.) onMeasure 메서드 내 RelativeLayout의 427 줄에있는 NullPointerException 예외입니다. 내가 가지고있는 버전의 라인은 onMeasure 메소드의 mLayoutParams 인스턴스 변수에 대한 첫 번째 액세스입니다. layout_width 및 layout_height 매개 변수를 XML 레이아웃이나 그와 비슷한 부분에 추가하는 것을 잊었을 가능성이 있습니까?

+0

감사합니다. 실제로 레이아웃 매개 변수가 누락되었습니다. 추가 후 : testView.setLayoutParams (새 LayoutParams (500,500)); 코드가 제대로 실행됩니다 :-) – dqminh

0

RelativeLayout을 LinearLayout에 래핑하는 경우에도 작동합니다. 대신 Linearlayout을 전달하십시오. 나는이 할 것

0

작동 : 당신이 RelativeLayout의 크기와 아이의 위치 사이의 순환 종속성이 있습니다

LayoutParams layoutParams = new LayoutParams(500,500); 
testView.setLayoutParams(layoutParams); 
testView.layout(0, 0, 500, 500); 
0

또 다른 가능한 이유가 있다는 것입니다. 예를 들어 신장이 WRAP_CONTENT이고 자식이 ALIGN_PARENT_BOTTOMRelativeLayout이 있습니다.

다음은 RelativeLayout의 주석입니다 :

아이들의 위치가 서로에게 또는 부모에게 관련하여 설명 할 수있는 레이아웃. 효율성을 위해 보기 간의 관계가 한 번에 계산되므로보기 Y가보기 X의 위치에 따라 인 경우보기 X가 레이아웃에서 먼저 인지 확인하십시오.

RelativeLayout의 크기와 그 하위 위치 사이의 순환 종속성을 가질 수 없습니다. 예를 들어, 높이가 WRAP_CONTENT이고 자식이 ALIGN_PARENT_BOTTOMRelativeLayout을 가질 수 없습니다.

레이아웃 속성에 대해서는 RelativeLayout.LayoutParams도 참조하십시오.