我有一个使用以下方法的课程:
/**
* @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。
答案 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;
}
捕捉声明从未受到打击。