学習目的のために、私は単体テストの分野に分割しました。私は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]
が存在しない可能性があります)。
私の機能の潜在的な問題点を既に知っていなければ、単体テストはどのような用途に使用されますか?
何か間違っていますか?より良いテスト方法がありますか?
あなたの質問の説明に使用するタグ以外のものを含むようにヘッダーを改訂してください。たとえば、「単体テストの目的は何ですか?」 –
アドバイスありがとう、私はそれを変更しました。 – nijansen