Файл: отладка и тестирвание программ.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 77

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Для тестирования этого цикла будем проверять следующие варианты, основанные на длине строки (так как условие выхода из цикла есть сравнение переменной итерации с этой величиной):

        1. Строка из единственного символа-разделителя;
        2. Строка из единственного символа число-буквенной последовательности;
        3. Строка из двух и более любых символов

Пустая строка не тестируется, так как в этом случае цикл не запускается.

Набор модульных тестов.

/// <summary>

/// Проверяет случай null-строки: корректное завершение работы (пустая строка)

/// </summary>

[Test]

public static void String_NullStringPassed_EmptyReturned()

{

string pass = null;

string res = pass.Capitalize();

Assert.AreEqual("", res);

}

/// <summary>

/// Проверяет случай пустой строки: корректное завершение работы (пустая строка)

/// </summary>

[Test]

public static void String_EmptyStringPassed_EmptyReturned()

{

string pass = "";

string res = pass.Capitalize();

Assert.AreEqual("", res);

}

/// <summary>

/// Проверяет случай строки, содержащей единственный символ-разделитель:

/// корректное завершение работы (пустая строка)

/// </summary>

[Test]

public static void String_DelimeterOnlyStringPassed_EmptyReturned()

{

string pass = " ";

string res = pass.Capitalize();

Assert.AreEqual("", res);

}

/// <summary>

/// Проверяет случай строки, содержащей единственный символ-НЕ разделитель:

/// корректное завершение работы (пустая строка)

/// </summary>

[Test]

public static void String_NotDelimeterOnlyStringPassed_CapitalizedStringReturned()

{

string pass = "X";

string res = pass.Capitalize();

Assert.AreEqual("X", res);

}

/// <summary>

/// Проверяет случай любой строки, пригодной к капитализации:

/// корректное завершение работы (катитализированная строка)

/// </summary>

[Test]

public static void String_AnyCorrectStringPassed_CapitalizedStringReturned()

{

string pass = "Это тест Строки";

string res = pass.Capitalize();

Assert.AreEqual("ЭтоТестСтроки", res);

}

Часть 4. Интеграционное тестирование

Определение модулей и способа тестирования.

Модульные тесты будут разрабатываться для следующих модулей:

        1. M1 = Opinion.ParseExpression() – модуль синтаксического анализа суждения
        2. M2 = DictionaryParser.Parse() – извлечение данных из файла словаря.
        3. M3 = DictionaryParser.Contains() – проверка на наличие формы слова в словаре
        4. M4 = DictionaryParser.GetInitialForm() – получение начальной формы слова на основе данных, хранящихся в словаре

Результат работы этих модулей используется в методе M5 = Opinion.CreateExpression().

Набор юнит-тестов.

В данном разделе будет приведен список юнит-тестов для модуля чтения и использования данных словаря (модули M2-M4).


Для модуля M2 (получение данных из файла):

        • public static void Dictionary_FileNotFound_ExceptionCaught()

Проверка работы модуля чтения данных из файла при отсутствии файла

        • public static void Dictionary_EmptyFile_NoExceptions()

Проверка работы модуля чтения данных из файла при файле, в котором не содержится данных

        • public static void Dictionary_AllLinesParsedSuccessfully_NoExceptions()

Проверка работы модуля чтения данных из файла при файле с корректными данными

        • public static void Dictionary_InvalidRecord_ExceptionCaught()

Проверка работы модуля чтения данных из файла при файле, данные в котором хранятся в некорректной форме

Подробно эти методы рассмотрены в разделе Часть 3. Тестирование методом «белого ящика». Модульное тестирование: Модуль DictionaryParser.Parse() .

Для модуля M3 (проверка наличия формы слова):

        • public static void Dictionary_ContainsSpecificForm_NoExceptions()

Проверка работы модуля проверки наличия формы слова при файле, который содержит слово, переданное в качестве параметра.

        • public static void Dictionary_DoesNotContainSpecificForm_ExceptionCaught()

Проверка работы модуля проверки наличия формы слова при файле, который не содержит слово, переданное в качестве параметра.

Для модуля M4 (получение начальной формы слова):

        • public static void Dictionary_InitialFormRevealed_NoExceptions()

Проверка работы модуля получения начальной формы слова при файле, который содержит слово, переданное в качестве параметра.

        • public static void Dictionary_InitialFormDidNotReveal_ExceptionCaught()

Проверка работы модуля получения начальной формы слова при файле, который не содержит слово, переданное в качестве параметра.

        • public static void Dictionary_InitialFormDidNotRevealFromEmptyFile_ExceptionCaught()

Проверка работы модуля получения начальной формы слова при пустом файле.

Полный код тестов хранится в файле DictionaryParserTests.cs проекта Opinions.Test (подкаталог Tests).

Набор интеграционных тестов.

Основное предназначение интеграционных тестов – проверить взаимодействие модулей. В качестве тестируемой части программы был выбран метод CreateExpression() класса Opinion. Выбор был обусловлен двумя причинами:

        • метод использует свойства класса, значения которым присваивается в методе ParseExpression (модуль M1) и явно вызывает метод Contains класса DictionaryParser (модуль M3);
        • метод неявно вызывает метод GetInitialForm (модуль M4) класса DictionaryParser, а тот, в свою очередь, зависит от метода Parse того же класса (модуль M2).

Полный код метода приведен в Листинг 3.

Листинг 3

1

public string CreateExpression()

2

{

3

this.Expression = this.ToString();

4

return this.Expression.Remove(new string[] {"(", ")", "[", "]"}).RemoveDoubleSymbols(' ');

5

}

6

7

8

public override string ToString()

9

{

10

return string.Format("{0} ({1}) {2}{3} [{4}{5}]",

11

this.Quantifier.ToString().Decapitalize().ToUpper(),

12

new DictionaryParser(DictionaryType.Субъект).GetInitialForm(this.Subject),

13

(this.IsLinkPositive) ? "" : (LocalizationHelper.GetString(Variables.Not) + " "),

14

new DictionaryParser(DictionaryType.Связка).GetInitialForm(this.Link),

15

(this.IsPredicatePositive) ? "" : (LocalizationHelper.GetString(Variables.Not) + " "),

16

new DictionaryParser(DictionaryType.Предикат).GetInitialForm(this.Predicate));

17

}

Все тесты расположены в файле OpinionCreateExpressionTests.cs проекта Opinions.Test (подкаталог Tests).

/// <summary>

/// Проверяет случай пустого суждения: корректное завершение работы

/// </summary>

[Test]

public static void CreateExpression_SuccessEmpty_ExceptionsCaught()

{

CommonOpinion opinion = new CommonOpinion("");

try

{

opinion.ParseExpression();

}

catch (InvalidOpinionFormatException e)

{

if (e.Reason != FormatExceptionReason.СубъектНеОпределен)

Assert.Fail("Subject is not defined Exception required");

}

Assert.Throws<NullReferenceException>(() => opinion.CreateExpression());

}

/// <summary>

/// Проверяет случай общеутвердительного суждения: корректное завершение работы

/// </summary>

[Test]

public static void CreateExpression_SucessPositive_NoExceptions()

{

CommonOpinion opinion;

try

{

opinion = new CommonOpinion("Все студенты учатся хорошо");

opinion.ParseExpression();

Assert.AreEqual("ВСЕ СТУДЕНТЫ УЧИТЬСЯ ХОРОШО", opinion.CreateExpression());

}

catch (Exception e)

{

Assert.Fail("Тест провален: " + e.Message);

}

}

/// <summary>

/// Проверяет случай отсутвия файла словаря:

/// все исключения перехвачены, корректное завершение работы

/// </summary>

[Test]

public static void CreateExpression_DictionaryDoesNotExist_ExceptionCaught()

{

File.Move("Data/Субъект.txt", "Data/Субъект1.txt");

CommonOpinion opinion = new CommonOpinion("Все студенты учатся хорошо");

Assert.Throws<DictionaryException>(opinion.ParseExpression);

File.Move("Data/Субъект1.txt", "Data/Субъект.txt");

}

/// <summary>

/// Проверяет случай некорректной формы слова в суждении:

/// все исключения перехвачены, корректное завершение работы

/// </summary>

[Test]

public static void CreateExpression_InvalidForm_ExceptionCaught()

{

CommonOpinion opinion = new CommonOpinion("Все стьюденты учатся хорошо");

try

{

opinion.ParseExpression();

Assert.Throws<InvalidOpinionFormatException>(() => opinion.CreateExpression());