2011-08-10 4 views
4
FooActivityTestCase 다음과 같이 ActivityInstrumentationTestCase2를 확장하려고합니다. FooActivityTestCase FooActivityTestCase FooActivityTestCase FooActivityTestCase FooActivityTestCase FooActivityTestCase FooActivityTestCase

이클립스가 생성자에서 다음 오류를 표시합니다.Java generics : Android Activity 테스트 케이스를 감싸는/확장하는 방법은 무엇입니까?

The constructor FooActivityTestCase<MyActivity>(String, Class<MyActivity>) is undefined 

꽤 제네릭을 사용하는 방법에 문제가 있다는 것을 확신합니다. SpecificFooTestCaseActivityInstrumentationTestCase2을 확장 할 때 어떤 오류도 발생하지 않습니다. 아무도 내가 잘못하고있는 것을 지적 할 수 있습니까?


쿠 블라이 칸 (Kublai Khan)과 마이클 마이어스 (Michael Myers)의 제안은 함께 작용합니다. 생성자에서 FooActivityTestCaseActivityInstrumentationTestCase2<T>Class<Activity>Class<T>까지 확장하도록 변경 한 후에는 클래스가 오류없이 컴파일됩니다. 이것은 결과 클래스입니다 (SpecificFooTestCase는 변경되지 않았습니다).

public abstract class FooActivityTestCase<T extends Activity> 
    extends ActivityInstrumentationTestCase2<T> { 

    public FooActivityTestCase(String pckg, Class<T> activityClass) 
    { 
    super(pckg, activityClass); 
    } 

    public void foo(){ ... } 
} 
+0

당신이 클래스 와 클래스 매개 변수를 대체 할 수 있습니까? (안드로이드가 없다면, 나는 짐작할 만하다.) –

+0

'FooActivityTestCase'는'ActivityInstrumentationTestCase2 '이 아닌'ActivityInstrumentationTestCase2 '을 확장해야한다. –

답변

3

: 이것은 (SpecificFooTestCase이 변경되지 않은) 결과 클래스입니다

//Only accepts classes that are Activity or extend Activity 
public FooActivityTestCase(String pckg, Class<? extends Activity> activityClass) 
     { 
     super(pckg, activityClass); 
     } 

건은 그 제네릭 인수, 제네릭 형식 에 대한 항상 동일한 제네릭 유형이어야합니다. 상속 트리에서 무언가를 전달할 수 있도록하려면 ? and extends 와일드 카드를 사용해야합니다. 이렇게하면 해당 클래스를 확장하는 모든 제네릭 유형을 전달할 수 있습니다.

+1

아주 가까이에 있습니다. 그러나 이것은 컴파일하기 전에 activityClass를 Class 으로 캐스팅해야하는 것처럼 보입니다. –

+0

수업 진행 가 아마도 더 나은 방법 일 것입니다. –

-2

이는 어떻게 안드로이드 단위 테스트 수행 등

public class MyInstrumentationTestRunner extends InstrumentationTestRunner 
{ 
    @Override 
    public TestSuite getAllTests() 
    { 
     InstrumentationTestSuite suite = new InstrumentationTestSuite(this); 
     suite.addTestSuite(MyTestClass.class); 
     return suite; 
    } 

    @Override 
    public ClassLoader getLoader() 
    { 
     return MyInstrumentationTestRunner.class.getClassLoader(); 
    } 
} 

그리고 정의 테스트 클래스 :

public class myTestClass extends 
    ActivityInstrumentationTestCase2<Home> 
{ 
    Context _context; 

    public MyTestClass() 
    { 
     super("com.MyClassToTest", Home.class); 
    } 

    public void testfunction() 
    { 
     myFunction(_context); 
    } 

    @Override 
    protected void setUp() throws Exception 
    { 
     super.setUp(); 
     setActivityInitialTouchMode(false); 
     Activity activity = getActivity(); 
     _context = activity.getApplicationContext(); 
    } 
} 
관련 문제