юнит тест. как написать?
От: rsdntchkru  
Дата: 24.03.10 15:53
Оценка:
Не имею опыта с юнит-тестами. Разбираюсь чисто теоретически.
Вот возник вопрос:
Например
Есть некая ф-ция. На входе текст, ф-ция пиш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..."
Иначе если файл начинается с новой линии, то будет расти бесконечно.
Как должен бы быть написан юнит-тест, чтобы можно было выявить такую ошибку и подобные ей такого плана?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.