Не имею опыта с юнит-тестами. Разбираюсь чисто теоретически.
Вот возник вопрос:
Например
Есть некая ф-ция. На входе текст, ф-ция пишeт в файл текст построчно. Файл имеет ограничения по размеру. Как только тeкста больше чем надо, ф-ця урeзает начало (n-ное кол-во строк).
Вот собственно псевдокод:
const int MAX_LINE_SIZE = 100;
const int MIN_DATA_SIZE = MAX_LINE_SIZE*10;
const int MAX_DATA_SIZE = MAX_LINE_SIZE*100;
const int CUT_DATA_LINES = 30;
void DataWriter::WriteLine(const String& aLine)
{
//cut the input text if bigger than max allowed for one line
String dataLine = aLine.Left(MAX_LINE_SIZE);
File file;
file.Open(DATA_FILENAME, frw);
int size = file.Size();
//if final data size will be bigger than max allowed,
//then cut several lines from begining of the file
if(size + dataLine.Length() > MAX_DATA_SIZE)
{
String fileData = file.ReadAll();
for(int i = 0; i < CUT_DATA_LINES; i++)
{
int newLinePos = fileData.Find("\n");
if(newLinePos <= 0 || newLinePos >= (fileData.Length() - MIN_DATA_SIZE))
break;
fileData = fileData.Right(fileData.Length() - newLinePos - 1);
}
file.Write(fileData);
}
//append new line to the end of the file
file.Seek(END_OF_FILE);
file.Write(dataLine);
file.Write("\n";);
file.Close();
}
В код вкралась ошибка: в строке "if(
newLinePos <= 0 || newLinePos >= (fileData.Length() — MIN_DATA_SIZE))" должно быть "if(newLinePos < 0..."
Иначе если файл начинается с новой линии, то будет расти бесконечно.
Как должен бы быть написан юнит-тест, чтобы можно было выявить такую ошибку и подобные ей такого плана?