Android单元测试在测试类中跳过行

时间:2014-08-29 13:04:30

标签: java android eclipse junit

我有一个使用以下方法的课程:

/**
 * @param contact
 * @return
 */
public long create(Contact contact) {
    ContentValues contactValues = buildContentValues(contact);

    try {
        return getDb().insert(CONTACTS_TABLE_NAME, null, contactValues);
    } catch (SQLiteConstraintException sce) {
        sce.printStackTrace(); // line 1
        log.debug("Error inserting:" + contact, sce); //line2
        return getDb().update(CONTACTS_TABLE_NAME, contactValues, COLUMN_ID + "=" + contact.userInfo.id, null); //line 3
    }
}

我使用AndroidTestCase作为Eclipse Android SDK的Android Junit测试运行。当我第一次开始运行时,我的测试失败了。当我介入它时,它正在处理异常并运行更新(标记为第3行)。

嗯......想知道为什么会这样。所以我添加了日志信息并重新运行了单元测试。当我单步执行代码时,它直接进入调试器中的第3行而不打印堆栈跟踪。奇怪,我想,但这可能只是一些代码卡在bin目录中。所以我运行一个项目清理并再次运行它。完全相同的结果。

我认为这是一个技巧。我在第3行和第1行设置断点并重新运行测试。测试直接跳到第3行而不会遇到第1行断点。

嗯....也许代码卡在bin目录中,eclipse无法用干净删除它。我以前见过这种情况。所以,我停止eclipse,转到bin目录,并手动删除那里的所有文件。然后我重新启动eclipse刷新文件系统,运行一个项目清理然后重新运行我的测试。没有变化。

WTF?

啊哈!我想,代码卡在手机上。我卸载了所有软件,包括手机上的测试应用程序。项目 - >清理并重新运行测试。仍然没有变化。

WTFF?

所以,我想,我已经在这款手机上进行了如此多的测试,一些代码碎片卡在了那里。我使用Android工具并构建一个新的模拟器。项目 - >清理,在模拟器上运行测试。完全相同的结果。

FWTFF?

所以,我毫不漫无目的地想知道接下来会尝试什么,所以我在这里发帖。

发布后,我与一位同事交谈并向他展示了我遇到的问题。他的日食设置与我的略有不同。他使用我的来源并完全重新创建了这个问题。

FFFFF。

1 个答案:

答案 0 :(得分:0)

我认为由于某些错误,这个缺陷是一种视错觉。我将代码更改为:

public long create(Contact contact) {
    ContentValues contactValues = buildContentValues(contact);

    long result;    
    try {
        result = getDb().insert(CONTACTS_TABLE_NAME, null, contactValues);
    } catch (SQLiteConstraintException sce) {
        sce.printStackTrace();
        log.debug("Error inserting:" + contact, sce);
        result = getDb().update(CONTACTS_TABLE_NAME, contactValues, COLUMN_ID + "=" + contact.userInfo.id, null);
    }

    return result;
}

捕捉声明从未受到打击。