NUnit: как установить имя теста в зависимости от параметра в [TestFixture (typeof (param))] - PullRequest
0 голосов
/ 10 октября 2018

Я использую NUnit + Webdriver + C #.Класс установки имеет следующую структуру:

[TestFixture(typeof(InternetExplorerDriver))]
[TestFixture(typeof(ChromeDriver))]
public partial class SetupBase<TWebDriver> where TWebDriver : IWebDriver, new()
{       
    public IWebDriver _driver;
    [OneTimeSetUp]
    public void OneTimeSetUp()
    {  
        Init();
    }
 }

Как задать имя тестов, включающее имя метода, аргументы и имя браузера?

Я пытался использовать возможности, но это не помогло

ChromeOptions options = new ChromeOptions();
options.AddAdditionalCapability("Name", String.Format ("{0}_Chrome", TestContext.CurrentContext.Test.Name), true);

Также пытался использовать следующий код, но не смог найти способ передачи типа драйвера в NameAttribute

public class NameAttribute : NUnitAttribute, IApplyToTest
    {
        public NameAttribute(string name)
        {
            Name = String.Format("{0} {1}", name);
        }

        public string Name { get; set; }

        public void ApplyToTest(Test test)
        {
            test.Properties.Add("Name", Name);
        }
    }

Не могли бы вы мне помочь, пожалуйста.Может быть, нужно как-то обновить структуру базового класса?

Так я использую в тестах

public class _001_General<TWebDriver> : SetupBase<TWebDriver> where TWebDriver : IWebDriver, new()
    {     
        [OneTimeSetUp]
        public void OneTimeSetupTest ()
        {
            //somework
        }

        [Test]
        public void Test ()
        {
            //somework
        }
     }

Также класс SetupBase содержит функции, которые используются в тестах

1 Ответ

0 голосов
/ 12 октября 2018

В NUnit тестовые случаи, методы тестирования, тестовые фиксации и классы универсальных тестовых фиксаций - все это «тесты», даже если мы иногда свободно говорим о «тестах» как означающих тестовых случаях.

В вашем примересоздаются следующие имена:

_001_General<TWebDriver> (or maybe _001_General<>)
    _001_General<InternetExplorerDriver>
        Test
    _001_General<ChromeDriver>
        Test

У тестов также есть "полные имена", аналогичные тем, которые используются для типа или метода.Например,

_001_General<ChromeDriver>.Test

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

Если вы используете бегун, который отображает полные имена, такие как NUnit 3Консоль Runner, то проблем нет.Итак, я полагаю, что нет.: -)

Некоторые бегуны, такие как тестовый адаптер NUnit 3 Visual Studio, используют простые имена тестовых случаев.Таким образом, вы получите несколько тестов с названием «Тест».

Это ваша проблема?Если это так, то это не очень хороший ответ.:-) Однако я оставлю это как частичное и добавлю к нему, услышав, какой бегун вы хотите использовать и что вы хотели бы видеть в нем.

ОБНОВЛЕНИЕ:

На основеВ вашем комментарии вы действительно хотите увидеть тест FullName - точно так же, как он отображается на консоли запуска NUnit 3, которую запускает TC для вас.Вы хотели бы видеть их в VS IDE, используя адаптер VS для NUnit 3.

К сожалению, вы не можете сейчас.:-) Подробнее об этом ниже.Между тем, вот некоторые обходные пути:

  1. Используйте консольный запуск на рабочем столе.Это не так визуально, но работает довольно хорошо.Это то, как я часто работаю.Шаги:

    • Установите консольную направляющую.Я рекомендую использовать Chocolatey для его установки в глобальном масштабе, разрешить вам использовать его со всеми вашими проектами.
    • Настройте ваш проект для запуска консоли с любыми опциями.
    • Убедитесь, что вы используетевнешнее окно консоли, чтобы вы могли получить параметры цветного дисплея, облегчающие использование консоли.
    • Подберите размеры ваших окон, чтобы вы могли видеть все (если у вас достаточно места на экране), или просто откройте консоль.поверх VS.
  2. Попробуйте обмануть VS, задав имя теста таким образом, чтобы он включал параметры драйвера.Это то, что вы уже делаете, и звучит так, как будто вы уже получили почти все, что вы можете из этой опции, то есть имя класса без параметров класса.Вы можете попытаться сделать еще один шаг, создав отдельных классов для каждого драйвера.Очевидно, это умножит количество классов, которые у вас есть, но не должно дублировать код.Вы можете использовать наследование от родовых классов, чтобы создать новый класс с только заголовком в каждом месте, где это необходимо.Как ...

    открытый класс TestXYZDriver: TestDriver ...

Это может быть много работы, так что это действительно зависит от того, насколько важно для васполучить визуальные результаты, которые включают параметры прибора прямо сейчас.


В будущем вы можете попросить, чтобы проект адаптера NUnit 3 предоставил возможность перечисления тестов по их полным именам.Я не работал над этим проектом в течение нескольких лет, поэтому я не уверен, возможно ли это на самом деле.Возможно, он не полностью контролирует адаптер, так как VS контролирует то, что отображается.

...