【问题标题】:JUnit android test classinheritanceJUnit android测试类继承
【发布时间】:2016-08-31 09:03:58
【问题描述】:

我有一个简单的 Android 应用程序和一些 espresso 测试。 我想编写一些基类,所以我的所有测试类都将继承它的@beforeClass 和@afterClass 方法,但问题是当我像下面的代码示例那样做时,JUnit 根本看不到任何测试。我收到了Empty test suite. 消息。有什么问题?

代码示例:

public class RealmTest {
    protected static Realm realm;

    @BeforeClass
    public static void beforeClass() {
        realm = Realm.getDefaultInstance();
        realm.setAutoRefresh(true);
    }

    @AfterClass
    public static void afterClass() {
        realm.close();
    }
}

@RunWith(AndroidJUnit4.class)
public class MainActivityTest extends RealmTest {
    @Rule
    public IntentsTestRule<MainActivity> activityTestRule = new IntentsTestRule<>(MainActivity.class);

    @Test
    public void startedFine() {
        assertNotNull(realm);
        onView(withId(R.id.button)).perform(click());
        intended(hasComponent(new ComponentName(getTargetContext(), EducationActivity.class)));
    }
}

如果我运行所有测试,来自 MainActivityTest 的测试将不会运行。 感谢您的帮助,如果需要一些额外的信息,请说。

【问题讨论】:

  • 把这两个方法放到MainActivityTest中。他们在工作吗
  • 您是否在您的app/build.gradle 文件中设置了testInstrumentationRunner

标签: java android unit-testing junit android-espresso


【解决方案1】:

猜测:JUnit 环境不寻找 静态 方法。所以也许你只是从你的基本方法中删除那个关键字(猜想你仍然可以保持你的 Realm 静态;我假设你真的只想要其中一个)。

但是,另一个建议是:不要对测试用例使用继承。

让测试用例对您有价值的一点是:它们应该能让您快速找到并修复生产代码中的错误。

但是,当您的“设置”从您的测试用例中隐藏时 - 因为事情不仅发生在某些 @Before 方法中……而且发生在某处的 @Before 方法中,在某个不同的类中……嗯,这可能会严重增加您需要了解失败的测试用例的时间。因为:您发现自己不仅研究了您的测试用例,还发现自己在测试代码中四处挖掘,以便了解究竟发生了什么除了失败的测试方法本身的代码!

因此:真的要小心平衡“代码重复”和“测试用例易于理解”方面!

【讨论】:

  • 基类中有静态方法,因为使用 @BeforeClass/@AfterClass 注解的方法必须是静态的,因为 JUnit 需要它。关于其余的,是的,谢谢,我同意你的看法,但我只是想在基类中做简单的初始化,所以我不会到处重复相同的几行,保持代码有点干净和清晰
  • 上升;太早以前我用过那些东西!
猜你喜欢
  • 1970-01-01
  • 2012-02-07
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 2011-09-06
相关资源
最近更新 更多