Skip to content

stacenko-developer/UnitTests

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UnitTests

Оглавление

  1. MSTest
    1. Тестирование корректной отработки создания секции с помощью конструктора с параметрами
    2. Вызов тестирующего метода с несколькими параметрами
    3. Тестирование бросания исключения типа ArgumentNullException
  2. NSubstitute
    1. Проверка вызова подмены через Received и DidNotReceive
    2. Проверка передачи аргументов через Any и Is
    3. Условные действия через When и Do
    4. Замещение одного метода через ForPartsOf

MSTest

MSTest (Microsoft Test) позволяет тестировать различные элементы программного обеспечения, например, функции и классы. Данный фреймворк будет полезен вам для быстрого тестирования ваших проектов.


Тестирование корректной отработки создания секции с помощью конструктора с параметрами

/// <summary> /// Проверка корректности работы свойств раздела. /// </summary> [TestMethod] public void GetSectionProperties_FromCorrectSection_ShouldGetCorrectProperties() { var section = new Section(_defaultName, _defaultCode, _defaultName); Assert.IsTrue(section.Name == _defaultName && section.Code == _defaultCode && section.Workspace == _defaultName && section.FieldsCount == 0); }

🔲 Чтобы ваш тест запускался, укажите над методом [TestMethod];
🔲 Тестирующий метод должен быть разбит на три части: объявление переменных, операции, выполнение проверок;
🔲 Если хотя бы один Assert.IsTrue() вернет false, тест не будет выполнен успешно


Вызов тестирующего метода с несколькими параметрами

/// <summary> /// Обновление поля с корректными параметрами. /// </summary> /// <param name="type">Тип поля.</param> /// <param name="value">Значение поля.</param> [DataRow(typeof(int), "1")] [DataRow(typeof(double), "123,1")] [DataRow(typeof(DateTime), "28/12/2019")] [DataRow(typeof(bool), "true")] [DataRow(typeof(string), "Hello")] [TestMethod] public void UpdateField_WithCorrectArguments_ShouldUpdateField(Type type, string value) { var section = new Section(_defaultName, _defaultCode, _defaultName); var newCode = "NrbNewCode"; var newName = "Новое название"; var newRequiredFieldFlag = false; var correctFieldsCount = 1; section.AddField(_defaultName, _defaultCode, type, _defaultRequiredFieldFlag, value); section.UpdateField(_defaultCode, newCode, newName, type, newRequiredFieldFlag, value); Assert.IsTrue(section.GetValueInField(newCode) == value && section.FieldsCount == correctFieldsCount); }

🔲 Для выполнения теста несколько раз с разными параметрами используйте DataRow


Тестирование бросания исключения типа ArgumentNullException

/// <summary> /// Создание раздела с помощью null-значений в конструкторе с двумя параметрами. /// </summary> /// <param name="name">Название раздела.</param> /// <param name="code">Код раздела.</param> /// <exception cref="ArgumentNullException">Текст не содержит символов или равен null!</exception> [ExpectedException(typeof(ArgumentNullException))] [DataRow("Название", null)] [DataRow(null, "NrbCode")] [TestMethod] public void CreateSectionByTwoArguments_WithNullValues_ShouldThrowArgumentNullException(string name, string code) { new Section(name, code); }

🔲 Чтобы ваш тест отработал корректно при сработанном исключении, необходимо добавить [ExpectedException]

⬆️Оглавление

NSubstitute

Nuget
NSubstitute является удобной заменой mock-библиотек .NET. Для начала нам необходимо создать объект, который мы будем настраивать в зависимости от наших потребностей:

/// <summary> /// Раздел. /// </summary> private Section _section = Substitute.For<Section>(DefaultName, DefaultCode);

Проверка вызова подмены через Received и DidNotReceive

/// <summary> /// Обновление поля с существующим кодом. /// </summary> [TestMethod] public void UpdateField_WithCorrectArguments_ShouldUpdateField() { _section.IsFieldExistence(Arg.Is(DefaultCode)) .Returns(true); _section.IsFieldExistence(Arg.Is(_newCode)) .Returns(false); _section.GetField(Arg.Is(DefaultCode)) .Returns(_defaultField); _section.UpdateField(DefaultCode, _newCode, DefaultName, DefaultType, _defaultRequiredFieldFlag, DefaultIntValueInString); _section.Received().IsFieldExistence(Arg.Is(DefaultCode)); _section.Received().IsFieldExistence(Arg.Is(_newCode)); _section.Received().GetField(Arg.Is(DefaultCode)); }

1️⃣ Перед обновлением параметров поля в первую очередь мы должны убедиться, что поле, данные которые мы хотим изменить, существует. Также важно, что новое название для нашего поля не должно быть кем-то занято.
2️⃣ Также настраиваем метод GetField, который вернет нам объект поля по его коду. После выполнения метода UpdateField мы проверяем, были ли вызваны методы IsFieldExistence и GetField.

Обратите внимание! Для того, чтобы возвращаемое значение метода можно было настроить, он должен быть виртуальным (иметь модификатор virtual).


Проверка передачи аргументов через Any и Is

/// <summary> /// Добавление поля с корректными параметрами. /// </summary> [TestMethod] public void AddField_WithCorrectArguments_ShouldAddField() { _section.IsFieldExistence(Arg.Is(DefaultCode)) .Returns(false); _section.AddField(DefaultName, DefaultCode, DefaultType, _defaultRequiredFieldFlag, DefaultIntValueInString); _section.Received().IsFieldExistence(Arg.Is(DefaultCode)); _section.DidNotReceive().GetField(Arg.Any<string>()); }

Условные действия через When и Do

/// <summary> /// Добавление поля в раздел с колбэком.  /// </summary> [TestMethod] public void GetField_WithCallBack_ShouldGetCallBack() { var index = 0; _section.When(section => section.GetField(DefaultCode)) .Do(section => index++); var correctIndex = 1; _section.GetField(DefaultCode); Assert.IsTrue(index == correctIndex); }

Замещение одного метода через ForPartsOf

/// <summary> /// Получение корректного значения свойства названия раздела по умолчанию. /// </summary> [TestMethod] public void GetDefaultSectionNameProperty_WithForPartsOf_ShouldGetCorrectResult() { var section = Substitute.ForPartsOf<Section>(DefaultName, DefaultCode); var correctDefaultSectionName = "Название раздела по умолчанию"; Assert.IsTrue(section.DefaultSectionName == correctDefaultSectionName); }

⬆️Оглавление

About

Юнит тесты на C#

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages