Добавить результат в TestCaseSource - PullRequest
2 голосов
/ 10 июля 2019

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

Я использую 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.

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

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

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

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));
}
1 голос
/ 10 июля 2019

Вы можете использовать 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), "TestCases")]
public void Test(List<string> calculation, string expected)
{
      var result = SolveCalculation(calculation);

      Assert.That(result, Is.EqualTo(expected));
}
...