在.NET中是可能执行subprocess中的方法(委托,静态方法,无论)? System.Diagnostics.Process似乎需要一个实际的文件名,这意味着需要一个单独的可执行文件。
我正在尝试的是在unit testing中validation是否在进程退出时清理了OS资源。 我知道可以使用CodeDOM或IL代来创build这样的程序集并执行它,但是unit testing的重点是隔离组件,而不是创build复杂性。 出于同样的原因,我想避免一个单独的程序集。
理想情况下,我会做这样的事情:
public static void CreateCounter() { var counter = new PerformanceCounter("category","counter","instance"); counter.InstanceLifetime = PerformanceCounterInstanceLifetime.Process; } [Test] public void TestResourcedisposal() { // Start child process to execute CreateCounter() ... // verify the resource is disposed }
如何以编程方式更改LAN设置(代理configuration)
我可以在TransactionScope块中使用sqlConnection.BeginTransaction
如何恢复/降级Windows Phone 8.1应用程序到C#5,我不小心升级到C#6
为什么我在尝试本地安装cs-script时出错?
Windows 7任务栏上的应用程序的位置
当从本机win32应用程序调用它时,如何debuggingC#COM程序集?
获取应用程序的NotifyIcon矩形?
在Windows上进行蓝牙开发
AsyncIO.ForceDotNet.Force()导致Windows XP上的内存泄漏
首先,不,没有办法做到这一点。 我的过程意味着一个.exe。 这不是Unix的地方,你可以派生一个父进程的副本。
我只是创建一个微型的.exe来运行。 你需要用不同的性能计数器来运行测试吗? 如果它与一个工作,那么它肯定会与其中任何一个工作?
你所说的不是一个单元测试。 与实际(昂贵的)操作系统服务交互违反了单元测试旨在争取的隔离的基本原则。
如果你的意图是以更加端到端的方式测试代码,实际上与性能计数器交互等等,这将是一个集成测试 ,应该以更“重负”的方式编写,即写一个如果需要,单独EXE,运行任何复杂的设置或清理步骤等
如果您需要对处理性能计数器的组件进行单元测试,则必须首先将此依赖关系抽象出来。 通常,您将创建一个表示性能计数器表面区域的基类或接口,然后创建某种类型的测试double来替换(test)运行时的功能。 真正的系统会使用一个简单的包装器,委托给实际的性能计数器,并通过上面的集成测试来执行。
从阅读你上面的评论,这几乎听起来像你试图测试.NET框架的保证。 我会质疑这是否真的有必要,因为它已经被很好的测试了,虽然也许你想测试你的代码是否正确地使用它(在这种情况下,你可以做单元或集成测试取决于你正在寻找的验证)。
我不确定你想要完成什么,但是从CreateCounter返回性能计数器实例并使用using指令会更容易,因为PerformanceCounter是Idisposable。 喜欢这个:
using (var counter = CreateCounter()) { // Do some work }
那么,即使在测试过程中,柜台也会被清理干净。
否则,我想你想要的是创建一个新的线程 。 然后你可以thread.Join()等待线程完成。 请参阅System.Threading命名空间以获取更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。