Предположим, у меня есть следующий класс:
public class Test
{
public Test(int value)
{
Value = value;
}
public int Value { get; }
public string ValueDescription
{
get
{
return Value > 10 ? "Value bigger than 10" : default(string);
}
}
}
Каков наилучший подход для проверки логики ValueDescription
?
Я вижу только два способа проверить это. Одним из способов будет использование ожидаемого результата в качестве параметра:
[TestFixture]
public class TestTest
{
[Test]
[TestCase(12, false)]
[TestCase(10, false)]
[TestCase(9, true)]
[TestCase(1, true)]
public void Should_ReturnValueDescription_AccordingToValue(int? value, bool isNullResult)
{
var mockTest = new Test(value);
Assert.AreEqual(string.IsNullOrEmpty(mockTest.ValueDescription), isNullResult);
}
}
И другим способом будет «дублирование» части тестового кода (здесь это не совсем ясно, потому что это довольно простой пример) и просто изменение метода Assert
.
[Test]
[TestCase(12)]
[TestCase(50)]
[TestCase(100)]
[TestCase(300)]
public void Should_ReturnValueDescription_When_ValueBiggerThan10(int? value, bool isNullResult)
{
var mockTest = new Test(value);
Assert.IsNotNull(mockTest.ValueDescription);
}
[Test]
[TestCase(9)]
[TestCase(2)]
[TestCase(5)]
[TestCase(10)]
public void Should_ReturnValueDescription_When_ValueLowerOrEqualThan10(int? value, bool isNullResult)
{
var mockTest = new Test(value);
Assert.IsNull(mockTest.ValueDescription);
}
Учитывая, что это довольно упрощенный пример, каков будет лучший подход в этом сценарии и в более сложном сценарии? (с необходимостью заглушек и т. д. для проверки)