Ошибка DotMemory (сравнение снимка с самим собой)

Попытка выполнить некоторые проверки утечки памяти в моем тесте автоматизации, используя следующие

  • nЕдиница 3.8.1
  • TestStack.Белый 0.13.3
  • точка памяти 3.0.20171219.105559

Запуск моих тестов с помощью следующей консольной команды, как описано здесь.

dotMemoryUnit.exe "E:\nunit3-console.exe" -- "C:\Dev\White\bin\Debug\Automation.dll"

Тесты (описанные ниже в основном в псевдокоде) запускают приложение, делают снимок, перемещаются по различным подстраницам, возвращаются на базовую страницу, а затем получают еще один снимок, чтобы я мог сравнить уцелевшие объекты. Сравнение снимков выполняется с помощью метода, описанного здесь

private const MemoryCheckPoint snapshot1

[ OneTimeSetUp ]
public void SetUp()
{
    // launch application, hook up with teststack.white
    LaunchApplication();
}

[ Test, Order(1) ]
public void GetSnapshot()
{
    snapshot1 = dotMemory.Check();
}

[ Test, Order(2) ]
public void DoStuff()
{
    //Many tests like this that test navigation from this page
    //making sure controls work and values are returned as expected
}

[ Test, Order (3) ]
public void CheckMemory()
{
    dotMemory.Check(memory =>
    {
        // Compare two checkpoints
        Assert.That(memory.GetDifference(snapshot1).GetSurvivedObjects
            (where => where.Type.Is<string>()).ObjectsCount, Is.EqualTo(0));
    });
}

[ OneTimeTearDown ]
public void CloseWindow()
{
    Application.Close();
}

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

Однако, когда я запускаю тесты с помощью консоли dotmemoryunit.exe, я получаю следующую ошибку.

1) Ошибка: White.Tests.MemoryCheck.System.ArguementException: вы пытаетесь сравнить снимок с самим собой в JetBrains.dotMemoryUnit.Kernel.dotMemory.Api.GetDifference‹ Snapshot snapshot1, Snapshot snapshot2>

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

Причина, по которой я использую средство запуска консоли, заключается в том, что по какой-то причине, когда я пытаюсь запустить тесты автоматизации с помощью средства выполнения тестов resharper, они не запускаются, и он просто возвращает Inconclusive: test not run


person user3265613    schedule 03.08.2018    source источник


Ответы (1)


По умолчанию dotMemory Unit работает в контексте "Теста", можно подумать, что в самом начале тестового метода есть вызов DotMemoryUnitController.TestStart, а в самом конце DotMemoryUnitController.TestEnd. Все данные действительны только внутри одного «Теста».

Вы можете отключить это поведение, указав параметр командной строки --no-instrumentation и вызвав DotMemoryUnitController.TestStart и DotMemoryUnitController.TestEnd вручную, как описано в этой статье

person Ed Pavlov    schedule 03.08.2018
comment
Волшебство, наконец-то я получаю результаты, не те результаты, которых я ожидал, но, по крайней мере, это прогресс. Жаль, что они не сделали это более очевидным (если только я случайно не пропустил этот момент) - person user3265613; 03.08.2018
comment
И, похоже, мой план провалился. По какой-то причине вместо того, чтобы получать снимки моего приложения, он захватывает снимки памяти материала testrunner. Может быть потому, что это проходит через Уайта... Думаю, мне нужно будет найти другой способ проверить это. - person user3265613; 03.08.2018
comment
Модуль dotMemory получает моментальный снимок процесса, в котором выполняется код теста, если вы запускаете другой процесс из теста, dMU не является выбранным инструментом. - person Ed Pavlov; 03.08.2018