如何手动使Espresso测试失败

4

有没有办法手动使Espresso测试失败?

比如说,我想要比较两个 int 类型的值,并在它们不匹配时使测试失败:

@Test
public void testTwoInts() {

    int var1 = mActivityTestRule.getActivity().var1;
    int var1 = mActivityTestRule.getActivity().var2;

    if(var1 != var2)
        fail();
}
1个回答

9

Espresso基于JUnit构建,因此您可以在其中使用JUnit断言。这使得您打算做什么变得更加清晰明了。在这种情况下,请执行import static org.junit.Assert.assertTrue,然后在您的测试中执行。

@Test
public void testTwoInts() {

    int var1 = mActivityTestRule.getActivity().var1;
    int var1 = mActivityTestRule.getActivity().var2;

    assertEquals(var1,var2);
}

如果你真的想手动处理它(不推荐),JUnit提供了同一类中的失败方法。导入static org.junit.Assert.fail,然后使用任何版本的失败方法(一个没有参数,一个带有解释失败原因的字符串)。这里你可以这样做:

@Test
public void testTwoInts() {

    int var1 = mActivityTestRule.getActivity().var1;
    int var1 = mActivityTestRule.getActivity().var2;

    if(var1 != var2)
        fail("The integers are not equal");
}

非常感谢,我猜JUnit通常与Java SDK一起使用,而Expresso用于Android并仅提供视图断言? - the_prole
我不太确定你在问什么。在Android上进行测试使用JUnit,即使你只导入Espresso类(我打赌你的类被注释为@RunWith(AndroidJUnit4.class)?)。Espresso只是为了处理视图等内容而添加了许多断言、规则和其他JUnit工具。所有与JUnit相关的内容都可用(包括Hamcrest匹配器,如果你需要更复杂的断言 - 实际上,这就是Espresso的一部分)。我认为Espresso文档没有清楚地解释这一点。 - Matthew
我明白了,Espresso是建立在JUnit之上的。我的测试类中唯一的注释是@Rule@Test - the_prole
嗯...也许我一直在使用不必要的注释。即便如此,是的,Espresso是建立在JUnit之上的,因此它具有JUnit的全部功能,以及与视图、活动等交互的所有额外功能。你是否需要在构建文件中指定运行器(android.support.test.runner.AndroidJUnitRunner)?如果你查看Espresso的设置说明,你会发现在几个地方都提到了JUnit。 - Matthew
是的,那个属性在我的 defaultConfig 块中声明了 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - the_prole
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接