Добавить результат в TestCaseSource

У меня есть простой метод, который вычисляет данный расчет из списка. Я хотел бы написать несколько тестов для этого метода.

Я использую NUnit. Я использую TestCaseSource, потому что пытаюсь указать список в качестве параметра. У меня есть решение из этого вопроса. Мои тесты выглядят так:

[TestFixture]
    public class CalcViewModelTests : CalcViewModel
    {
        private static readonly object[] _data =
            {
                new object[] { new List<string> { "3", "+", "3" } },
                new object[] { new List<string> { "5", "+", "10" } }
            };

        [Test, TestCaseSource(nameof(_data))]
        public void Test(List<string> calculation)
        {
            var result = SolveCalculation(calculation);

            Assert.That(result, Is.EqualTo("6"));
        }
    }

Я хотел бы протестировать несколько вычислений, например, с помощью testCases.

Тестовые случаи имеют параметр Result. Как я могу добавить результат в TestCaseSource, чтобы проверить несколько вычислений?


person Nightscape    schedule 10.07.2019    source источник


Ответы (2)


Похоже, это должно работать:

private static readonly object[] _data =
    {
        new object[] { new List<string> { "3", "+", "3" }, "6" },
        new object[] { new List<string> { "5", "+", "10" }, "15" }
    };

[Test, TestCaseSource(nameof(_data))]
public void Test(List<string> calculation, string expectedResult)
{
    var result = SolveCalculation(calculation);

    Assert.That(result, Is.EqualTo(expectedResult));
}
person Renat    schedule 10.07.2019
comment
Вам не нужно также аннотировать [Test], если вы аннотируете [TestCaseSource]. Это должно быть хорошо: [TestCaseSource(nameof(_data))] public void Test(List<string> calculation, string expectedResult) { ... }. - person ANeves thinks SE is evil; 13.01.2020

Для этого вы можете использовать атрибут TestCaseData. Он позволяет инкапсулировать тестовые данные в отдельный класс и повторно использовать их для других тестов.

public class MyDataClass
{
    public static IEnumerable TestCases
    {
        get
        {
            yield return new TestCaseData("3", "+", "3").Returns("6");
            yield return new TestCaseData("5", "+", "10").Returns("15");
        }
    }  
}

[Test]
[TestCaseSource(typeof(MyDataClass), nameof(MyDataClass.TestCases))]
public void Test(List<string> calculation, string expected)
{
      var result = SolveCalculation(calculation);

      Assert.That(result, Is.EqualTo(expected));
}
person Pavel Anikhouski    schedule 10.07.2019