2013-09-01 36 views
4

我在代码中使用抽象活动类来抽象出活动类的某些特征。是否可以使用Robolectric测试抽象活动

我正在尝试使用Robolectricgradle-android-test-plugin使用扩展抽象类的子类来测试抽象活动类。我似乎无法让它工作。

有没有人有这方面的经验,甚至有可能?基本结构是:

@RunWith(RobolectricGradleTestRunner.class) 
public class AbstractActivityTest { 
    private ActivityTest activity; 

    @Before 
    public void setUp() throws Exception { 
     activity = Robolectric.buildActivity(ActivityTest.class).create().get(); 
    } 


    private class ActivityTest extends AbstractActivity { 
     // do something 
    } 
} 

最初,我得到的错误消息子类不是静态的,所以我把它做成静态的。现在,我得到了以下两个失败:

initializationError FAILED 
java.lang.Exception: Test class should have exactly one public constructor 

initializationError FAILED 
java.lang.Exception: No runnable methods 

任何明显真实的测试,我把@Test方法获得成功。

+0

究竟是不是工作?有没有错误信息? – tiguchi

回答

5

第一个错误说明您已将非默认构造函数添加到您的测试类或更改了默认构造函数的访问级别。但正如它所说junit测试类应该至少有一个公共构造函数。

第二个说,在测试类的至少一种方法应具有@Test注解(junit 4)或测试子(junit 3)开始。

3

哟可以做你正在做的事:子类抽象活动和实例具体类。

但是,您需要在其自己的公用文件中声明扩展抽象活动的类。如果它是一个嵌套类Robolectric将无法实例化它。

但我不知道为什么。

+0

如果我在与测试类相同的文件中定义类而不是嵌套类,它也适用于我。我不必把它放在自己的文件中。 – CEGRD

0

我测试一个抽象的活动是这样的:

1.创建抽象的活性起着:

public abstract class AbstractActivity extends AppCompatActivity { 

    public int getNumber() { 
     return 2; 
    } 
} 

2.创建测试类:
你只需要声明一个静态抽象类的嵌套子类。

@RunWith(RobolectricTestRunner.class) 
public class AbstractActivityTest { 

    @Test 
    public void checkNumberReturn() throws Exception { 
     TestAbstractActivity testAbstractActivity = Robolectric.setupActivity(TestAbstractActivity.class); 
     assertThat(testAbstractActivity.getNumber(), is(2)); 
    } 

    public static class TestAbstractActivity extends AbstractActivity { 
    } 
} 
相关问题