Расширьте xUnit.NET для использования пользовательского кода при обработке класса и определении местоположения методов тестирования

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

Я думаю, что лучше всего создать клон вашего исходного экземпляра, таким образом не нужно вручную копировать / устанавливать их на новом экземпляре.

  1. Как сказал @Marius, создайте снимок вашего диска ( НЕ пропускайте эту часть: вы можете потерять все ваши файлы / конфигурацию )
  2. Убедитесь, что вы выполнили шаг 1 .
  3. Клонируйте свой экземпляр
  4. Назовите свой клонированный экземпляр так, как вы хотите.
  5. Убедитесь, что выбран магазин моментальных снимков вашего диска, созданный в # 1 (убедитесь, что вы также выбрали тот же тип диска: если ваш оригинальный диск был, например, SSD, вы должны выбрать, хотите ли вы, чтобы новый диск был SSD тоже)
  6. Убедитесь, что ваши IP-адреса установлены правильно

Все готово:)

5
задан David Alpert 28 January 2009 в 15:46
поделиться

2 ответа

Получается, что я искал метод ITestClassCommand.EnumerateTestMethods ().

  1. Средство выполнения тестов xUnit.NET по умолчанию будет перебирать все классы в ваша тестовая сборка.
  2. Для каждого из них будет проверяться наличие RunWithAttribute; это ваш шанс преодолеть Реализация ITestClassCommand который используется для определения методов содержащие тесты. (Хороший пример - RunWithNUnit.)
  3. ITestClassCommand.EnumerateTestMethods () вызывается для обработки тестового класса и возврата IEnumerable тестовых методов.
  4. каждый тест IMethodInfo затем передается в ITestClassCommand.EnumerateTestCommands (IMethodfo) в getMethodfo) test IEnumerable of ITestCommands
  5. каждая ITestCommand затем выполняется и получает возможность вернуть результат.

В случае с моим примером выше мне понадобится что-то вроде:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class RunWithMyTestClassCommandAttribute : RunWithAttribute
{
   public RunWithMyTestClassCommandAttribute()
               : base(typeof(MyTestClassCommand)) {}
}

Затем я мог бы украсить мой приведенный выше пример:

[RunWithMyTestClassCommand]
public class AdditionSpecification
{
  static int result;

  public void Because()
  {
    result = 2 + 2;
  }

  public void Result_is_non_zero()
  {
    Assert.True(result <> 0);
  }

  public void Result_is_correct()
  {
    Assert.Equal(4, result);
  }
}

Наконец, в MyTestClassCommand у меня есть возможность между EnumerateTestMethods () и EnumerateTestCommands (IMethodInfo testMethod), чтобы использовать любую логику, которую я хочу найти и создать экземпляры ITestCommand, которые выполняются как отдельные тесты.

Кстати, в процессе исследования. Эта проблема, Я столкнулся с небольшой ошибкой в ​​платформе xUnit.NET, когда пользовательский IMethodInfo, сгенерированный EnumerateTestMethods (), никогда не появлялся в EnumerateTestCommands (..), потому что он разворачивался и повторно упаковывался средством выполнения тестов или одной из его фабрик.

Я отправил эту проблему в проект xUnit на codeplex, и она была исправлена ​​30 мая 2009 г. для xUnit.NET 1.5 CTP 2

10
ответ дан 18 December 2019 в 07:57
поделиться

IUseFixture xUnit.net позволяет выполнять настройку отдельных приборов. Таким образом, вы можете определить свой собственный класс фикстуры:

public class AdditionFixture : IDisposable
{
  public int Because() 
  {
    return 2 + 2;
  }

  public void Dispose()
  {
   //test tear down code
  }      
}

Затем ваш тестовый класс может реализовать это (с setFixture, требующим реализации):

public class AdditionSpecification : IUseFixture<AdditionFixture>
{
  int result;

  public void SetFixture(AdditionFixture Fixture)
  {
   result = Fixture.Because();
  }

  [Fact]
  public void Result_is_non_zero()
  {
   Assert.True(result <> 0);
  }

  [Fact]
  public void Result_is_correct()
  {
   Assert.Equal(4, result);
  }
}

Средство запуска xUnit создаст единственный экземпляр вашего фикстуры и передаст его в SetFixture перед запуском каждого теста . После выполнения всех ваших тестов бегун избавится от фикстуры, если он реализует IDisposable. Надеюсь, это поможет!

10
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: