MSTest (Microsoft Test) позволяет тестировать различные элементы программного обеспечения, например, функции и классы. Данный фреймворк будет полезен вам для быстрого тестирования ваших проектов.
/// <summary>/// Проверка корректности работы свойств раздела./// </summary>[TestMethod]publicvoidGetSectionProperties_FromCorrectSection_ShouldGetCorrectProperties(){varsection=newSection(_defaultName,_defaultCode,_defaultName);Assert.IsTrue(section.Name==_defaultName&§ion.Code==_defaultCode&§ion.Workspace==_defaultName&§ion.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]publicvoidUpdateField_WithCorrectArguments_ShouldUpdateField(Typetype,stringvalue){varsection=newSection(_defaultName,_defaultCode,_defaultName);varnewCode="NrbNewCode";varnewName="Новое название";varnewRequiredFieldFlag=false;varcorrectFieldsCount=1;section.AddField(_defaultName,_defaultCode,type,_defaultRequiredFieldFlag,value);section.UpdateField(_defaultCode,newCode,newName,type,newRequiredFieldFlag,value);Assert.IsTrue(section.GetValueInField(newCode)==value&§ion.FieldsCount==correctFieldsCount);}🔲 Для выполнения теста несколько раз с разными параметрами используйте DataRow
/// <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]publicvoidCreateSectionByTwoArguments_WithNullValues_ShouldThrowArgumentNullException(stringname,stringcode){newSection(name,code);}🔲 Чтобы ваш тест отработал корректно при сработанном исключении, необходимо добавить [ExpectedException]
⬆️Оглавление
NSubstitute является удобной заменой mock-библиотек .NET. Для начала нам необходимо создать объект, который мы будем настраивать в зависимости от наших потребностей:
/// <summary>/// Раздел./// </summary>privateSection_section=Substitute.For<Section>(DefaultName,DefaultCode);/// <summary>/// Обновление поля с существующим кодом./// </summary>[TestMethod]publicvoidUpdateField_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).
/// <summary>/// Добавление поля с корректными параметрами./// </summary>[TestMethod]publicvoidAddField_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>());}/// <summary>/// Добавление поля в раздел с колбэком. /// </summary>[TestMethod]publicvoidGetField_WithCallBack_ShouldGetCallBack(){varindex=0;_section.When(section =>section.GetField(DefaultCode)).Do(section =>index++);varcorrectIndex=1;_section.GetField(DefaultCode);Assert.IsTrue(index==correctIndex);}/// <summary>/// Получение корректного значения свойства названия раздела по умолчанию./// </summary>[TestMethod]publicvoidGetDefaultSectionNameProperty_WithForPartsOf_ShouldGetCorrectResult(){varsection=Substitute.ForPartsOf<Section>(DefaultName,DefaultCode);varcorrectDefaultSectionName="Название раздела по умолчанию";Assert.IsTrue(section.DefaultSectionName==correctDefaultSectionName);}