【问题标题】:Android JUnit: How to have an exception cause a test case to pass (@Test annotation)Android JUnit:如何让异常导致测试用例通过(@Test注解)
【发布时间】:2011-08-03 00:16:28
【问题描述】:

我正在尝试为 Android 应用程序编写一些 JUnit 测试。

我在网上看到,如果单元测试抛出异常,你可以像这样使用@Test注解

@Test(expected = NullPointerException.class)
public void testNullValue() throws Throwable
{
    Object o = null;
    o.toString();
}

但是 Eclipse 告诉我这个注释不存在。我怎样才能解决这个问题?如果我运行测试,它运行良好并按预期失败,但显然我希望它失败(因此实际上通过):)

【问题讨论】:

    标签: java android exception junit


    【解决方案1】:

    你总是可以手动绕过它:

    public void testNullValue()
    {
        try {
           Object o = null;
           o.toString();
           fail("Expected NullPointerException to be thrown");
        } catch (NullPointerException e) {
           assertTrue(true);
        }
    }
    

    【讨论】:

    • 虽然这似乎可行,但我不知道复制应该是内置功能是否有意义。不过谢谢
    • 如果您想测试一下 catch 块中的内容,这是有道理的。 +我认为预先注释这将是这样做的方式。不过我没有使用 JUnit 这么久,所以我很可能是错的..
    • 是的,这是在使用 JUnit 3 的 Android 上进行测试的正确模式。(注解仅在 JUnit 4 中可用)
    • 啊,我不知道Android使用JUnit 3。谢谢Aaron。
    • assertTrue(true) 不是很有用。在那里什么也不做。
    【解决方案2】:

    我认为应该是:

    @Test(expected=NullPointerException.class)
    

    【讨论】:

    • 没错,我只是打错了。然而这并不能解决问题。无论如何,谢谢。
    • 啊,好吧。您有 Test 注释的导入吗?你在使用 JUnit 4.x 吗? (我知道在某个版本的 Eclipse 中,它以某种方式将我切换到 Junit 3.x,我认为不支持注释。)无论如何都要检查一下。
    • 嗯,我导入了 JUnit 4 库,现在编译器允许我使用 @Test 注释。不幸的是,当我尝试运行测试时,它给了我错误“测试运行失败:仪器运行因 'java.lang.ClassNotFoundException' 而失败”
    • 它是否说缺少哪个类?
    • 这个问题清楚地表明它是关于测试一个 android 应用程序。使用 Android SDK 进行测试使用 JUnit 3。
    【解决方案3】:
    1. 仔细检查您使用的 JUnit 版本
    2. 不要使用 eclipse 提供的 JUnit (Indigo),而是手动导入一个 JUnit 4.9

    错误是那个“神秘”的错误,没有简单或直接的答案,我只是在尝试想法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 2017-09-01
      • 1970-01-01
      • 2011-01-29
      • 2021-07-15
      • 1970-01-01
      相关资源
      最近更新 更多