web-dev-qa-db-ja.com

単体テストにおける陽性テストと陰性テストとは

TDDは初めてです。ポジティブテスト、ネガティブテスト、境界テストなどについてのドキュメントがいくつかあります。ポジティブテストとネガティブテストの違いを教えてもらえますか?さまざまなタイプのテストについて言及しているリファレンスはありますか? (私は本を探していません)

21
VJAI

Positive Testing-有効なデータを提供してシステムをテストします。

ネガティブテスト-無効なデータを指定してシステムをテストします。

たとえば、アプリケーションにテキストボックスが含まれていて、ユーザーの要件に従って、テキストボックスは文字列のみを受け入れる必要があります。文字列以外の入力を与えると、それは否定的なテストになります。

ネガティブテストは、アプリケーションのテスト範囲を改善します。ネガティブテストとポジティブテストのアプローチを併用すると、可能な入力データ(有効と無効の両方)を使用してアプリケーションをテストでき、アプリケーションの安定性と信頼性を高めることができます。

さまざまな種類のテストについては、これを参照してください 用語集

25
Rohan Patil

(TDDの焦点である)単体テストの観点から、概念は次のように簡単に説明できます。

  • 肯定的なテストは、関数/メソッドが期待される入力で期待どおりに動作するかどうかをチェックします。
  • negative testは、関数/メソッドが不正な入力で期待どおりに動作するかどうかをチェックします。 (「悪い」の理想的なすべての可能な定義をカバーするのに十分な否定的なテストが必要です)詳細については この質問 を参照してください。
12
mpontillo

Positive Vs Negative Test


===============================================================
|      Positive Test Case      |      Negative Test Case      |
+==============================+==============================+
| test by valid/expected data  | test by invalid data         |
+------------------------------+------------------------------+
| check if the function does   | check if the function does   |
| that it should do            | not that it should not do    |
+------------------------------+------------------------------+
| examine general behaviors of | examine if the function      |
| the function                 | is fault proof (does not     |
|                              | crush/mis-response in bad    |
|                              | situations)                  |
===============================+===============================

いくつかの簡単な例は、違いをより明確に理解するのに役立ちます。


候補関数:

public boolean deleteFile(String filePath) {
    // try to delete the file; and
    // return true for success, false for failure
}

ポジティブテストケース-この関数はファイルパスを想定しているため、ポジティブテストケースはすべての有効なファイルパスで構成されます。

public void deleteFile_forAbsoluteFilePath_P() {
    String filePath = "D:\\Temp\\file.txt";
    // create file, call deleteFile(), and check if really deleted
}

public void deleteFile_forRelativeFilePath_P() {
    String filePath = "file.txt";
    // create file, call deleteFile(), and check if really deleted
}

public void deleteFile_forNonExistingFilePath_P() {
    String filePath = "wHSyY#zP_04l.txt";
    // call deleteFile(), and check if false is returned
}

public void deleteFile_forSymlinkedFilePath_P() {
    String filePath = "D:\\Temp\\symlink\\dir\\file.txt";
    // create file, create symlink, delete file, and
    // check if really deleted
}

public void deleteFile_forUndeletableFile_P() {
    String filePath = "file.bin";
    // create file, restrict delete permission, call deleteFile(), and
    // check if does not crash and returns false
}

ネガティブテストケース-関数に送信でき、無効なものはすべてネガティブテストケースになります。

public void deleteFile_forAlreadyDeletedFile_N() {
    String filePath = "file.bin";
    // create file, call deleteFile() twice, and
    // for second time check if does not crash and returns false
}

public void deleteFile_forDirectoryPath_N() {
    String dirPath = "D:\\Temp\\dir";
    // create directory, call deleteFile(), and check if false is returned
}

public void deleteFile_forSymlinkedDirectoryPath_N() {
    String symlink = "D:\\Temp\\symlink";
    // create symlink, call deleteFile(), and check if false is returned
}

public void deleteFile_forNullString_N() {
    String filePath = NULL;
    // call deleteFile(), and check if does not crash and returns false
}

public void deleteFile_forCorruptedFilePath_N() {
    String filePath = "D:\\Tem¡¿ÿ¿";
    // call deleteFile(), and check if does not crash and returns false
}

単体テストは、関数のライブドキュメントとしても機能します。したがって、関数にすべての可能な引数をスローする代わりに、否定的なテストケースは、予期される例外条件のみで構成される必要があります。

したがって、これをテストする必要はありません-

Unnecessary Negative Test

7
Minhas Kamal

ネガティブテストでは、システムが実行してはいけないことが実行されないことを確認します。例:マネージャーのみが新しいラップトップの要求を承認できる場合、否定的なテストは「通常の」ユーザーがその要求を承認できないことを示します。

2
AJM