Ошибка 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
как описано в этой статье