Почти дублированный юнит-тест - PullRequest
0 голосов
/ 01 ноября 2018

Предположим, у меня есть следующий класс:

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);
}

Учитывая, что это довольно упрощенный пример, каков будет лучший подход в этом сценарии и в более сложном сценарии? (с необходимостью заглушек и т. д. для проверки)

1 Ответ

0 голосов
/ 01 ноября 2018

Я думаю, что имеет смысл проверить, равна ли ValueDescription ожидаемой строке, в случае значений> 10

[Test]
[TestCase(12)]
[TestCase(100)]
[TestCase(Int32.MaxValue)]
public void GivenATestWithValueBiggerThan10_ThenValueDescriptionShouldBeEqualsAsExpected(int value)
{
    // arrange
    var mockTest = new Test(value);

    // act/assert
    Assert.That(mockTest.ValueDescription, Is.EqualTo("Value bigger than 10"));
}

И проверьте, является ли ValueDescription нулевым, в случае значений <= 10 </p>

[Test]
[TestCase(10)]
[TestCase(-100)]
[TestCase(Int32.MinValue)]
public void GivenATestWithValueLessOrEqualThan10_ThenValueDescriptionShouldBeNull(int value)
{
    // arrange
    var mockTest = new Test(value);

    // act/assert
    Assert.That(mockTest.ValueDescription, Is.Null);
}
...