Передача поддельных данных в качестве параметров в метод теста NUnit - PullRequest
0 голосов
/ 29 ноября 2018

Я использую NUnit с C # и библиотекой Faker.NET. Есть ли способ передать поддельные данные, сгенерированные Faker.NET, в качестве параметров для моего метода тестирования?

Редактировать:

public static object[,] GetInvalidLoginCredentials()
    {
        object[,] FD = { { new object[] { Name.First(), Internet.Password(10, 12) }, new object[] { "TestUser", "" }, new object[] { "", "TestPassword" } } };
        return FD;
    }

 [Test, Order(1), TestCaseSource("GetInvalidLoginCredentials")]        
    public void InvalidLogin(string userName, string password)
    {
         // Test case code 
    }

При запуске этого теста исполнитель запускает его только 2 раза: -

  • Первый с параметрами ("","TestPassword")
  • Второй с параметрами ("TestUser","")

И игнорирует запуск теста с параметрами из первого объекта в массиве источника данных, что его значения генерируются с помощью Faker.Net

1 Ответ

0 голосов
/ 11 декабря 2018

Проблема связана с NUnit (а не Fake.NET) и возникает, когда сгенерированное имя теста включает в себя любые аргументы, значения которых могут меняться между запусками.

Тестовый случай ниже( не использует Fake.NET) будет страдать от этой же проблемы, так как DateTime меняется каждый раз.

new object[] { DateTime.Now.ToString(), "TestUser" }

(отображаемое) имя этого теста будет: InvalidLogin("11/12/2018 20:10:59", "TestUser") но InvalidLogin("11/12/2018 20:15:59", "TestUser") через 5 минут.


Один из способов решить эту проблему - назначить тесту фиксированное имя, которое не включает эти значения динамических параметров.

Для этого измените тип возвращаемого значения GetInvalidLoginCredentials с Object[,] на IEnumerable<TestCaseData>.

Класс TestCaseData имеет метод SetName для отмены именитеста.

Ваш TestCaseSource метод, описанный выше, будет выглядеть следующим образом, где «игнорируемый» тест теперь будет иметь фиксированное имя InvalidLogin-WithFakeData.

    public static IEnumerable<TestCaseData> GetInvalidLoginCredentials()
    {
        TestCaseData[] FD = {                 
            new TestCaseData(Name.First(), Internet.Password(10, 12)).SetName("InvalidLogin-WithFakeData"), 
            new TestCaseData("TestUser", ""), 
            new TestCaseData("", "TestPassword")                
            };

        return FD;
    }
.
...