Использование xunit для генерации нескольких тестовых случаев с целочисленным диапазоном - PullRequest
0 голосов
/ 27 марта 2019

Есть ли способ автоматически создать несколько тестовых случаев в xUnit?Или я обречен на указание каждого возможного ввода как InlineData?

. В приведенном ниже примере в NCrunch или в модуле тестирования VS показывается, что в тест передается случайное число.Таким образом, каждый раз, когда вы запускаете тест, есть шанс, что он пройдет, хотя он и не пройдёт.

В NUnit атрибут Range фактически генерирует несколько перестановок тестового примера согласно https://github.com/nunit/docs/wiki/Range-Attribute

public bool RangeTest(int input)
{

    if (input > 10)
    {
        return false;
    }

    return true;
}

[Theory]
[AutoMockData]
public void RangeTestCase([Range(0, 11)] int test)
{
    var result = RangeTest(test);      

    Assert.True(result);
}

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

AutoFixture не предоставляет такую ​​функцию из коробки.Есть способ сделать это путем создания пользовательского DataAttribute, но, как было отмечено ответом, вы не должны этого делать.Это звучит довольно оксюморонно, но вы должны избегать случайности при использовании автофиксирования.Вам все равно следует проверять граничные значения, используя несколько экземпляров атрибута, например InlineAuto[Moq]Data, чтобы он не проходил / проходил предсказуемо и каждый раз.

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

  • места, где ввод не имеет значения для текущего теста;
  • сценарии при проверке личности - вы проверяете, что то же самое значение появляется в результате;в этом случае вас не интересует, что именно является значением.
0 голосов
/ 27 марта 2019

Вот хорошее объяснение, как сделать тест: https://andrewlock.net/creating-parameterised-tests-in-xunit-with-inlinedata-classdata-and-memberdata/ В вашем случае вы должны создать специальный класс данных, который будет возвращать дату теста;

public class GetTestData : IEnumerable<Int32>
{
 public IEnumerator<Int32> GetEnumerator()
 {
    yield return 1;
    yield return 2;
    yield return 3;
    yield return 4;

   IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
 }
}

ииспользование класса будет:

[Theory]
[ClassData(typeof(GetTestData ))]
public bool RangeTest(int input)

Но для проверки хорошей идеей является тестирование только крайних случаев.Вы должны избегать случайности в тестах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...