C# Структура тестирования L oop Посредством тестовых случаев - PullRequest
0 голосов
/ 03 августа 2020

Я хочу использовать среду тестирования MS для тестирования налогового калькулятора, и мне нужно выполнить более 100 тестовых случаев. Как показано ниже, я настроил массив testCases и l oop через каждый, но когда я запускаю тесты, он возвращает только один результат.

Question:

  1. Is есть ли способ отобразить результат каждого теста?
  2. Как мне вернуть результаты каждого теста? В настоящее время система возвращает значения только в случае сбоя.
            [DataTestMethod]
            public void CalculateResult(int val)
            {

                // arrange
                int[] testCase = { 1000,2000, 35000, 400003, 59509 };

                foreach (int income in testCase)
                {

                    double expectOutput = TaxCalculator(income);

                    // act
                    
                    SUT.GeneralTaxRule generalTaxationRule = new SUT.GeneralTaxRule(income);
                    
                    double actualOutput = generalTaxationRule.getTax();

                    // assert
                    Assert.AreEqual(expectOutput, actualOutput);
                    Console.WriteLine(expectOutput, actualOutput);
                }

            }

Ответы [ 3 ]

2 голосов
/ 03 августа 2020

Когда вы используете атрибут DataTestMethod, у вас должны быть атрибуты для каждого DataRow

[DataTestMethod]
[DataRow(1000)]
[DataRow(2000)]
// etc
public void CalculateResult(int income)
{
    double expectOutput = TaxCalculator(income);

    // act                        
    SUT.GeneralTaxRule generalTaxationRule = new SUT.GeneralTaxRule(income);                        
    double actualOutput = generalTaxationRule.getTax();

    // assert
    Assert.AreEqual(expectOutput, actualOutput);
    Console.WriteLine(expectOutput, actualOutput);
}

Другой способ добиться того же - использовать DynamicData атрибут

[DataTestMethod]
[DynamicData(nameof(TestData), DynamicDataSourceType.Method)]
public void CalculateResult(int income)
{
    double expectOutput = TaxCalculator(income);

    // act                        
    SUT.GeneralTaxRule generalTaxationRule = new SUT.GeneralTaxRule(income);                        
    double actualOutput = generalTaxationRule.getTax();

    // assert
    Assert.AreEqual(expectOutput, actualOutput);
    Console.WriteLine(expectOutput, actualOutput);
}

public static IEnumerable<object[]> TestData()
{
    yield return new object[] { 1000 };
    yield return new object[] { 2000 };
    /// etc.
}

Вы можете управлять данными, как хотите, в TestData выше (например, файл, база данных или жестко закодированные). Есть и другие варианты для DynamicDataSourceType, которые вы могли бы изучить.

1 голос
/ 19 августа 2020

Используя Xunit, вы можете сделать это так:

private static int[] incomesArray = { 1000,2000, 35000, 400003, 59509 };

public static IEnumerable<object[]> GetIncomeTestData =>
                incomesArray
                .Select(x => new object[] { x })
                .ToArray();

[Theory]
[MemberData(nameof(GetIncomeTestData))]
public void CalculateResult(int income)
{
    // arrange
    var expectOutput = TaxCalculator(income);
    var generalTaxationRule = new SUT.GeneralTaxRule(income);
                
    // act            
    var actualOutput = generalTaxationRule.getTax();

    // assert
    Assert.Equal(expectOutput, actualOutput);
}

Вы можете иметь столько значений в incomesArray, сколько захотите, и вы сможете увидеть результат для каждого теста значение.

0 голосов
/ 03 августа 2020

Если вы используете [DataTestMethod], вы можете добавить тестовые примеры с помощью одного или нескольких атрибутов [DataRow(...)]:

[DataTestMethod]
[DataRow(1000)]
[DataRow(2000)]
[DataRow(35000)]
[DataRow(400003)]
[DataRow(59509)]
public void CalculateResult(int val)
{
    double expectOutput = TaxCalculator(val);

    // act  
    SUT.GeneralTaxRule generalTaxationRule = new SUT.GeneralTaxRule(val);
    double actualOutput = generalTaxationRule.getTax();

    // assert
    Assert.AreEqual(expectOutput, actualOutput);
    Console.WriteLine(expectOutput, actualOutput);
}

Таким образом вы можете проверить результат теста для каждого val в окне обозревателя тестов.

...