Nunit 点内存错误(将快照与自身进行比较)

Nunit 点内存错误(将快照与自身进行比较),nunit,resharper,dotmemory,teststack,Nunit,Resharper,Dotmemory,Teststack,尝试使用以下命令在我的自动化测试中执行一些内存泄漏检查 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” 这些测试(以下大部分是伪代码)启动应用程序,抓取一个快照,导航到各个子页面,返回到基本页面,adn然后

尝试使用以下命令在我的自动化测试中执行一些内存泄漏检查

  • 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”

这些测试(以下大部分是伪代码)启动应用程序,抓取一个快照,导航到各个子页面,返回到基本页面,adn然后获取另一个快照,这样我就可以对幸存的对象进行比较。快照比较是使用概述的方法完成的

private const memory检查点快照1
[一次性设置]
公共作废设置()
{
//启动应用程序,连接teststack.white
启动应用程序();
}
[测试、命令(1)]
public void GetSnapshot()
{
snapshot1=dotMemory.Check();
}
[测试、命令(2)]
公共空间
{
//许多这样的测试都会测试此页面的导航
//确保控件正常工作并按预期返回值
}
[测试、命令(3)]
公共void CheckMemory()
{
dotMemory.Check(内存=>
{
//比较两个检查点
Assert.That(memory.GetDifference(snapshot1).getSurvivedObject
(其中=>where.Type.Is()).ObjectScont,Is.EqualTo(0));
});
}
[onetimeeartown]
公共无效关闭窗口()
{
Application.Close();
}
其思想是,如果有任何UI元素由于事件等原因而未被处理,则应将其作为幸存对象进行处理,然后我可以稍后手动重复测试以跟踪问题的根源

但是,当我使用dotmoryunit.exe控制台运行测试时,我得到以下错误

1) 错误:White.Tests.MemoryCheck.System.ArguementException:您试图在JetBrains.dotMemoryUnit.Kernel.dotMemory.Api.GetDifference

考虑到它们绝对是不同的快照,我不明白为什么会失败


我使用控制台运行程序的原因是,出于某种原因,当我尝试使用resharper测试运行程序运行自动化测试时,这些测试不会运行,它只会返回不确定的结果:默认情况下,测试不运行点内存单元在“测试”上下文中工作,您可以这样想,就像在测试方法的最开始有一个调用
dotmoryunitcontroller.TestStart
和最末尾的
dotmoryunitcontroller.TestEnd
。所有数据仅在一个“测试”内有效


您可以通过指定
--no instrumentation
命令行参数并调用
dotmoryunitcontroller.TestStart
dotmoryunitcontroller.TestEnd
手动说明默认情况下dotmory单元在“测试”上下文中的工作方式来关闭此行为,您可以这样想,就像在测试方法的最开始有一个调用
dotmoryunitcontroller.TestStart
和最末尾的
dotmoryunitcontroller.TestEnd
。所有数据仅在一个“测试”内有效


您可以通过指定
--no instrumentation
命令行参数并调用
dotmoryunitcontroller.TestStart
dotmoryunitcontroller.TestEnd
手动操作来关闭此行为。我终于得到了结果,不是我期望的结果,但至少它是进步了。遗憾的是,他们并没有让这一点变得更加明显(除非我不小心跳过了这一点),而且我的计划看起来是个错误。出于某种原因,它不是获取我的应用程序的快照,而是获取testrunner的内存快照。可能是因为这是通过白色。。。我想我需要找到一种不同的方法来测试这些东西。dotMemory单元会获取运行测试代码的进程的快照,如果您从测试中运行另一个进程,dMU不是我们选择的工具。Magic,我终于得到了结果,不是我期望的结果,但至少它是进步的。遗憾的是,他们并没有让这一点变得更加明显(除非我不小心跳过了这一点),而且我的计划看起来是个错误。出于某种原因,它不是获取我的应用程序的快照,而是获取testrunner的内存快照。可能是因为这是通过白色。。。我想我需要找到一种不同的方法来测试这些东西。dotMemory单元获取运行测试代码的进程的快照,如果您从测试中运行另一个进程,则dMU不是所选的工具。
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();
}