TDDは初めてです。ポジティブテスト、ネガティブテスト、境界テストなどについてのドキュメントがいくつかあります。ポジティブテストとネガティブテストの違いを教えてもらえますか?さまざまなタイプのテストについて言及しているリファレンスはありますか? (私は本を探していません)
Positive Testing-有効なデータを提供してシステムをテストします。
ネガティブテスト-無効なデータを指定してシステムをテストします。
たとえば、アプリケーションにテキストボックスが含まれていて、ユーザーの要件に従って、テキストボックスは文字列のみを受け入れる必要があります。文字列以外の入力を与えると、それは否定的なテストになります。
ネガティブテストは、アプリケーションのテスト範囲を改善します。ネガティブテストとポジティブテストのアプローチを併用すると、可能な入力データ(有効と無効の両方)を使用してアプリケーションをテストでき、アプリケーションの安定性と信頼性を高めることができます。
さまざまな種類のテストについては、これを参照してください 用語集
(TDDの焦点である)単体テストの観点から、概念は次のように簡単に説明できます。
===============================================================
| 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
}
単体テストは、関数のライブドキュメントとしても機能します。したがって、関数にすべての可能な引数をスローする代わりに、否定的なテストケースは、予期される例外条件のみで構成される必要があります。
したがって、これをテストする必要はありません-
ネガティブテストでは、システムが実行してはいけないことが実行されないことを確認します。例:マネージャーのみが新しいラップトップの要求を承認できる場合、否定的なテストは「通常の」ユーザーがその要求を承認できないことを示します。