【发布时间】:2011-12-23 15:04:59
【问题描述】:
出于学习目的,我潜入了单元测试领域。我使用 QT 阅读了一些关于这个问题的教程,并提出了以下内容:
class QMyUnitTest : public QObject
{
Q_OBJECT
private:
bool isPrime(unsigned int ui);
private Q_SLOTS:
void myTest();
};
bool QMyUnitTest::isPrime(unsigned int n) {
typedef std::map<unsigned int, bool> Filter;
Filter filter;
for(unsigned int ui = 2; ui <= n; ui++) {
filter[ui] = true;
}
unsigned int ui = filter.begin()->first;
for(Filter::iterator it = filter.begin();
it != filter.end(); it++) {
if(it->second) {
for(unsigned int uj = ui * ui; uj <= n; uj += ui) {
filter[uj] = false;
}
}
ui++;
}
return filter[n];
}
void QMyUnitTest::myTest() {
}
QTEST_MAIN(QMyUnitTest)
#include "tst_myunittest.moc"
我知道我的素数查找算法效率低下,尤其是有缺陷;就是这个意思。现在我想彻底测试一下,但出现了以下问题:
要正确测试,我是否不必非常准确地了解可能出现的问题?
当然,我可以遍历前 1000 个素数并检查它们是否出现 true 或 1000 个不是素数并检查它们是否出现 false,但这可能无法发现算法中的缺陷(对于例如:return filter[n]; 显然很可怕,因为如果n<2 可能不存在filter[n])。
如果我已经必须知道我的功能的潜在问题是什么,那么单元测试有什么用?
我做错了吗?有没有更好的测试方法?
【问题讨论】:
-
请修改您的标题以包含用于描述您的问题的标签以外的其他内容。例如,“单元测试的目的是什么?”
-
谢谢你的建议,我改了。
标签: c++ unit-testing qt testing