Представьте себе этот простой сценарий: У меня есть класс с именем MyModel
:Как я должен выполнить тестирование нескольких обязательных полей в C#?
public class MyModel
{
public string Prop01 { get; set; }
public string Prop02 { get; set; }
public string Prop03 { get; set; }
public bool IsValid()
{
if (String.IsNullOrEmpty(Prop01) || String.IsNullOrEmpty(Prop02) || String.IsNullOrEmpty(Prop03))
return false;
return true;
}
}
As, вы можете увидеть, если какие-либо из свойств на MyModel
является нулевым или пустым, метод IsValid()
вернется false
, другими словами, все поля «требуются».
Я написал некоторые Unit Tests испытать IsValid()
метод:
[TestMethod]
public void MyModel_Invalid_When_Prop01_Is_Null()
{
var myModel = new MyModel();
Assert.AreEqual(myModel.IsValid(), false);
}
[TestMethod]
public void MyModel_Invalid_When_Prop02_Is_Null()
{
var myModel = new MyModel();
Assert.AreEqual(myModel.IsValid(), false);
}
[TestMethod]
public void MyModel_Invalid_When_Prop03_Is_Null()
{
var myModel = new MyModel();
Assert.AreEqual(myModel.IsValid(), false);
}
Конечно все эти тесты будут проходить, но я не совсем доволен. Представим себе, что я разработчик, который видел тест MyModel_Invalid_When_Prop01_Is_Null
(который был написан другим разработчиком). Я ожидал бы, что просто назначив значение Prop01
myModel
, тест должен начать сбой. Но, конечно, это не произойдет, поэтому я изменил тесты, чтобы выглядеть следующим образом:
[TestMethod]
public void MyModel_Invalid_When_Prop01_Is_Null()
{
var myModel = new MyModel();
myModel.Prop02 = "Some value";
myModel.Prop03 = "Some value";
Assert.AreEqual(myModel.IsValid(), false);
}
[TestMethod]
public void MyModel_Invalid_When_Prop02_Is_Null()
{
var myModel = new MyModel();
myModel.Prop01 = "Some value";
myModel.Prop03 = "Some value";
Assert.AreEqual(myModel.IsValid(), false);
}
[TestMethod]
public void MyModel_Invalid_When_Prop03_Is_Null()
{
var myModel = new MyModel();
myModel.Prop01 = "Some value";
myModel.Prop02 = "Some value";
Assert.AreEqual(myModel.IsValid(), false);
}
Теперь тесты действительно тестирование, что каждое из свойств заполнены, но если я добавить Prop04
к MyModel
, это также обязательное поле, мне нужно будет снова изменить все мои тесты единиц, поэтому я не думаю, что это хорошая идея.
Так что мой вопрос: Как я могу выполнить тестирование нескольких требуемых свойств таким образом, чтобы я уверен, что тест проходит или не проходит из-за этого конкретного свойства, которое я тестирую сейчас? Или, может быть, Должен ли я тестировать эти сценарии?
Очень приятно! Спасибо за ответ! –
Рад помочь! * Пожалуйста, поддержите/примите ответ, если это поможет вам – Kenneth