VS2008单元测试-断言方法退出我正在尝试使用VS2008内置的单元测试框架编写C#单元测试,我正在测试的方法是调用环境.退出(0)。当我在我的单元测试中调用这个方法时,我的单元测试被中止了。该方法确实应该调用Exit,我想要一种方法来测试它,以及它使用的退出代码。我怎样才能做到这一点?我查看了Microsoft.VisualStudio.TestTools.UnitTesting命名空间,但没有看到任何看起来相关的内容。[TestMethod][DeploymentItem("myprog.exe")]publicvoidMyProgTest(){//想要确保此退出的代码为0:MyProg_Accessor.myMethod();同时,这是我要测试的代码的要点:staticvoidmyMethod(){Environment.Exit(0);编辑:这是我在测试方法中使用的解决方案,感谢RichardOD:Processproc;尝试{proc=Process.Start(path,myArgs);}catch(System.ComponentModel.Win32Exceptionex){proc=null;断言失败(例如消息);}Assert.IsNotNull(proc);proc.WaitForExit(10000);Assert.IsTrue(proc.HasExited);Assert.AreEqual(code,proc.ExitCode);这听起来真是个坏主意。Environment.Exit(0),显然会按照指定的方式执行,因此您的单元测试将会中断。如果您真的想对此进行测试,您可以将其包装在Process.Start中,方法是启动一个单独的进程并检查返回码-请参阅它。我想另一种选择是分解出这段代码并将其注入测试间谍,或者使用模拟对象来验证正确的行为。也许你可以用TypemockIsolator做点什么——我相信这会让你模拟静态方法。您需要为Environment类创建一个包装器,然后在您的代码中使用该包装器。对于您的单元测试,注入包装器的模拟版本。以下示例使用RhinoMocks来验证该方法是否使用预期参数调用包装器。publicclassEnvironmentWrapper{publicvirtualvoidExit(intcode){环境。退出(代码);}}publicclassMyClass{privateEnvironmentWrapperEnvironment{get;放;}publicMyClass():this(null){}publicMyClass(EnvironmentWrapperwrapper){this.Environment=wrapper??新的环境包装器();}publicvoidMyMethod(intcode){this.Environment.Exit(code)}}[TestMethod]publicvoidMyMethodTest(){varmockWrapper=MockRepository.GenerateMock();intexpectedCode=5;mockWrapper.Expect(m=>m.Exit(expectedCode));varmyClass=newMyClass(mockWrapper);myclass.MyMethod(预期代码);mockWrapper.VerifyAllExpectations()}您将无法执行此测试-Environment.Exit会完全终止应用程序。这意味着任何使用此代码的AppDomain都将被完全卸载,无论它是您的生产应用程序还是单元测试框架。您在这里唯一的选择是使用fakieExit方法模拟Environment类。您可以向该方法添加一个参数,以向其传递一个exit()方法不会退出的假环境。您可以从应用程序调用的方法中提取此参数化方法,并对提取的函数进行单元测试。这样,您就不必修改您的应用程序。唯一能想到的就是:以上就是C#学习教程:VS2008单元测试-断言方法退出分享的所有内容,如果对大家有用需要详细了解C#学习教程,希望大家多多支持更多关注——staticvoidmyMethod(){DoEnvironmentExit(0);}staticvoidDoEnvironentExit(intcode){#ifdefinedTEST_SOLUTIONSomeMockingFunction(code);#else环境退出(代码);#endif}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
