尝试使用以下内容在我的自动化测试中进行一些内存泄漏检查
使用here概述的以下控制台命令启动测试。
dotMemoryUnit.exe“ E:\ nunit3-console.exe”-“ C:\ Dev \ White \ bin \ Debug \ Automation.dll”
这些测试(以下大部分为psuedocode概述)将启动应用程序,获取快照,导航至各个子页面,返回基础页面,然后获取另一个快照,这样我就可以对存活对象进行比较。快照比较是使用here
概述的方法完成的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();
}
这个想法是,如果有任何UI元素由于事件等而没有被处置,则应该将它们作为幸存的对象,然后我可以稍后手动重复测试以追踪问题。
但是,当我使用dotmemoryunit.exe控制台运行测试时,出现以下错误。
1)错误:White.Tests.MemoryCheck.System.ArguementException:您正在尝试在JetBrains.dotMemoryUnit.Kernel.dotMemory.Api.GetDifference <快照快照,快照Snapshot2>
上将快照与其自身进行比较考虑到它们肯定是不同的快照,我无法弄清楚为什么会失败。
我使用控制台运行程序的原因是,由于某种原因,当我尝试使用Resharper测试运行程序运行自动化测试时,它们没有运行,并且仅返回Inconclusive:测试未运行
答案 0 :(得分:2)
默认情况下,dotMemory单元在“测试”的上下文中工作,您可以考虑一下它,就像在测试方法的开头有一个调用$catz = array( 'name' => $cat->name, 'slug' => $cat->slug );
而在结尾DotMemoryUnitController.TestStart
一样。所有数据仅在一个“测试”中有效。
您可以通过指定DotMemoryUnitController.TestEnd
命令行参数并手动调用--no-instrumentation
和DotMemoryUnitController.TestStart
来描述in this article的方式来关闭此行为