Добавлен: 28.03.2023
Просмотров: 84
Скачиваний: 2
Для тестирования этого цикла будем проверять следующие варианты, основанные на длине строки (так как условие выхода из цикла есть сравнение переменной итерации с этой величиной):
-
-
-
- Строка из единственного символа-разделителя;
- Строка из единственного символа число-буквенной последовательности;
- Строка из двух и более любых символов
-
-
Пустая строка не тестируется, так как в этом случае цикл не запускается.
Набор модульных тестов.
/// <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. Интеграционное тестирование
Определение модулей и способа тестирования.
Модульные тесты будут разрабатываться для следующих модулей:
-
-
-
- M1 = Opinion.ParseExpression() – модуль синтаксического анализа суждения
- M2 = DictionaryParser.Parse() – извлечение данных из файла словаря.
- M3 = DictionaryParser.Contains() – проверка на наличие формы слова в словаре
- 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());