Junit4 + Robolectric:将外部类标记为测试用例并运行它

时间:2016-09-02 14:32:59

标签: java android unit-testing junit robolectric

我有一个带有嵌套类的类,其中包含测试用例。它看起来像这样:

public class ProviderUtilsTest {
        public static final String TAG = ProviderUtilsTest.class.getSimpleName();

        public static class TestConstructor {

            @Test
            public void noPublicConstructor() {
                Class<ProviderUtils> clazz = ProviderUtils.class;
                Constructor<?>[] constructors = clazz.getConstructors();
                for (Constructor<?> constructor : constructors) {
                    assertThat(constructor.isAccessible(), is(false));
                }
            }
        }
    }

当我使用此配置时,Android Studio不会将ProviderUtilsTest视为测试用例。即当我用RMB点击它的文件时,它不允许运行它,并且它不显示类声明行左侧的运行按钮。但它会为嵌套类显示它。

如何将ProviderUtilsTest视为测试用例,即显示适当的用户界面并强制它运行嵌套类的所有测试?

2 个答案:

答案 0 :(得分:0)

我不想说你的好测试理念的执行情况有多糟糕,但我会向你提供我的解决方案,该解决方案应该有效,并给出与你相同的结果。

将现有代码更改为:

public class ProviderUtilsTest {
        public static final String TAG = ProviderUtilsTest.class.getSimpleName();

        public static class TestConstructor {

            public boolean noPublicConstructor() {
                Class<ProviderUtils> clazz = ProviderUtils.class;
                Constructor<?>[] constructors = clazz.getConstructors();
                for (Constructor<?> constructor : constructors) {
                    if (constructor.isAccessible()) return false;
                }
                return true
            }
        }
    }

然后在您的ExampleActivityTest中写下这个:

 @Test
 public void ensureThatThereIsNoPublicConstructor() throws Exception {
    assertTrue(ProviderUtilsTest.TestConstructor.noPublicConstructor());
}

希望它会有所帮助

答案 1 :(得分:0)

  

为了更好的结构目的。我希望外部类代表整个类的测试用例,每个嵌套类都是针对特定方法的测试用例,嵌套类的每个方法都要对特定输入进行测试

或者,您可以使用包来组织测试用例。