尝试使用以下方法在我的自动化测试中进行一些内存泄漏检查
- 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"
测试(下面主要以伪代码概述)启动应用程序,抓取快照,导航到各个子页面,返回基本页面,然后获取另一个快照,以便我可以对幸存的对象进行比较。快照比较是使用此处概述的方法完成的
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< Snapshot snapshot1, Snapshot snapshot2> 处将快照与其自身进行比较
考虑到它们绝对是不同的快照,我无法弄清楚为什么会失败。
我使用控制台运行器的原因是,由于某种原因,当我尝试使用 resharper 测试运行器运行自动化测试时,它们没有运行,它只是返回 Inconclusive : test not run