2 разных теста с 2 разными переменными среды - PullRequest
0 голосов
/ 04 апреля 2019

Попытка сравнить функцию, drawManaged(), работающую под двумя разными DLL:

  • drawManaged() функция в C #
  • drawManaged() вызывает drawNative() в native1base.dll (или других собственных dll) через swig-интерфейс
  • какую нативную DLL для загрузки можно настроить с помощью переменных среды, %NATIVE_DLL_PATH%
  • хотите протестировать drawManaged(), работающий в 2 разных собственных DLL: native1base.dll и native2optimized.dll

как я могу сделать это с помощью benchmarkdotnet?

1 Ответ

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

Benchmarkdotnet будет тестировать методы, помеченные атрибутом [Benchmark].

Может быть лучше создать небольшую утилиту (или непосредственно в проекте, который вы создаете) для вызова этой функции.Постарайтесь ограничить все переменные между вызовами, поэтому вместо установки переменной среды в собственных случаях и последующего вызова функции C # прямой вызов декорированных методов [Benchmark] вызывает только то, что вы хотите сравнить.

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

    public class DrawManagedVsDrawNative
{
    private DrawManaged drawManaged = new DrawManaged();
    private DrawNative drawNative = new DrawNative();
    private byte[] data;


    [GlobalSetup]
    public void Setup()
    {
       // Some initialization here
    }

    [Benchmark]
    public byte[] DrawManaged() => drawManaged.Draw();

    [Benchmark]
    public byte[] DrawNative() => drawNative.Draw();
}

Есть больше декораторов и параметров конфигурации, которые предлагает benchmarkdotnet для вашего теста, обратитесь к docs для этого

Если выдействительно нужно тестировать настройки переменных среды, вы можете создавать собственные задания, используя реализацию ManualConfig.Примерно так:

 [Config(typeof(ConfigWithCustomEnvVars))]
    public class DrawManagedVsDrawNative
    {
        private class ConfigWithCustomEnvVars : ManualConfig
        {
            private const string EnvVar = "Env_Var_Sample";

            public ConfigWithCustomEnvVars()
            {
                Add(Job.Core.WithId("Variable not set"));
                Add(Job.Core
                    .With(new[] { new EnvironmentVariable(EnvVar, "1") })
                    .WithId("Variable set"));
            }
        }

    private DrawManaged drawManaged = new DrawManaged();
    private DrawNative drawNative = new DrawNative();
    private byte[] data;


    [GlobalSetup]
    public void Setup()
    {
       // Some initialization here
    }

    [Benchmark]
    public byte[] DrawManaged() => drawManaged.Draw();

    [Benchmark]
    public byte[] DrawNative() => drawNative.Draw();

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