Запуск BenchmarkDo tNet в XUnit - PullRequest
       30

Запуск BenchmarkDo tNet в XUnit

3 голосов
/ 24 марта 2020

Я использую. NET Core 3.1 в моем проекте (web api, VS2019) и XUnit 2.4.1. Недавно я подумывал добавить несколько тестов производительности и наткнулся на эту библиотеку - BenchmarkDo tNet. Поскольку я уже использовал XUnit для других тестов, я хотел запустить BenchmarkDo tNet из XUnit [Fact] s .

Я нашел это post , где объясняется, что теневые копии сборок должны быть отключены для xunit. Поэтому я попытался сделать следующее:

  1. Для простоты я создал fre sh new . net core 3.1 проект консольного приложения с примером метода, который я хотел сравнить:
[SimpleJob(RuntimeMoniker.NetCoreApp31)]
[MinColumn, MaxColumn, MedianColumn, KurtosisColumn]
[HtmlExporter]
public class TestScenarios
{
    [Params("test")]
    public string TextToHash { get; set; }

    [Benchmark]
    public string CalculateSha256()
    {
        var engine = SHA256.Create();
        var hash = engine.ComputeHash(Encoding.ASCII.GetBytes(TextToHash));
        return Encoding.ASCII.GetString(hash);
    }
}

Затем в Program.cs У меня есть:

class Program
{
    static void Main(string[] args)
    {
        BenchmarkRunner.Run<TestScenarios>();
    }
}

При компиляции и запуске приложения в Выпуск Я подтвердил что папка BenchmarkDo tNet .Artifacts с выходными файлами журнала и тестами была создана правильно.

Я добавил проект XUnit в решение и создал простой [Факт] метод:
public class DotNetBenchmarkTest
{
    [Fact]
    public void TestMethod()
    {
        BenchmarkRunner.Run<TestScenarios>();
    }
}

Также встраиваем в конфигурацию Release и запуск этого метода из тестового обозревателя создаст папку BenchmarkDo tNet .Artifacts в bin / Release / dotnetcoreapp3.1 / , но файлы журналов пусты.

Я также пытался добавить xunit.runner. json файл со следующим содержимым в root моего проекта XUnit:
{
  "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
  "shadowCopy": false,
  "methodDisplay": "classAndMethod",
  "diagnosticMessages": true
}

, но похоже, не влияет на поведение - я проверил, что файл xunit.runner. json скопирован в каталог выходного бина (Свойства-> Копировать в выходной каталог-> Копировать всегда).

Я также установил xUnit. net Console Runner v2.4.1 и попытался запустить тесты с консоли:
xunit .\path\assembly-name.dll -noshadow

Опять не повезло. Опцию -noshadow Я нашел по этой ссылке github . Похоже, что опция была доступна в более старой версии, но в списке нет моей справочной информации для xunit console runner v2.4.1 , но я попробовал.

Так что мой вопрос: можно заставить работать DotNetBenchmarkTest вместе с XUnit, и если да, можете ли вы указать мне, что я делаю неправильно?

...