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

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

  • nUnit 3.8.1
  • TestStack.White 0.13.3
  • dotMemory 3.0.20171219.105559

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

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

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

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

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

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

1 ответ

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

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

Другие вопросы по тегам