我想知道是否有人知道工具或技术自动将常见故障注入正在运行的.NET程序。这样的东西.......NET应用程序的故障注入?
- 在分配时
- 随机注入一个OutOfMemoryException随机注入FileNotFoundException异常时试图在使用套接字来访问文件
- 随机IO注入或网络异常。
所以我真的很想在CLR中拦截一些特定的调用,类似于AppVerifier对原生Win32代码的操作。目的是在开发人员控制之外的许多错误条件下测试应用程序,并确保处理这些条件。
我想知道是否有人知道工具或技术自动将常见故障注入正在运行的.NET程序。这样的东西.......NET应用程序的故障注入?
所以我真的很想在CLR中拦截一些特定的调用,类似于AppVerifier对原生Win32代码的操作。目的是在开发人员控制之外的许多错误条件下测试应用程序,并确保处理这些条件。
有一个codeplex项目叫做TestAPI可以做运行时错误注入。你需要看看它的managed code fault injection API。它使用CLR profiling API在运行时拦截方法调用并修改它们的行为。
看看an example,看看如何在一个已经编译好的exe文件的方法调用中注入异常。
我通过几个例子阅读,我认为它看起来非常有前途,而且它免费的事实当然有帮助。 – ChaosPandion 2010-02-11 01:11:24
是的 - 这看起来非常好。 – noctonura 2010-02-11 17:14:47
我不知道如何“随机”注入这些东西,但我会建议你嘲笑那些通常不受你控制的部分,并且在你的一些测试中模拟抛出异常。
我感觉他正在谈论他想要验证的大量代码,所以我怀疑他能够重新设计所有这些代码来支持嘲笑。 – ChaosPandion 2010-02-11 01:04:54
我想说这是他的问题,但我理解处理大型遗留代码库的困难。我没有看到一种方法来正确地测试这些场景,而不会重构嘲笑,但也许别人会改变一些东西。 – 2010-02-11 01:06:45
Typemock Isolator似乎是你最好的选择。
如果您想要投入FileNotFoundException
来模拟测试,那么您可以执行以下操作。
在你的产品代码,你有这样的方法
public static Project OpenProject(string filePath)
并在测试代码,你可以伪造的OpenProject
呼叫这样
Isolate.WhenCalled(()=>Project.OpenProject(nulll)).WillThrow(new FileNotFoundException());
当你的代码打OpenProject
,一个FileNotFoundException
将被抛出。
这不完全符合您的要求,但它与您的应用程序中改进异常处理的相同目标有关并可能有所帮助。
展鹏异常猎人我没有用过这个特定的产品,但我已经使用其他展鹏产品 http://www.red-gate.com/products/Exception_Hunter/index.htm
是巨大的。
拔下网线? – ChaosPandion 2010-02-11 00:48:22
'讽刺'拔下你的记忆? – 2010-02-11 00:51:32
确切地说:)有很多黑客可以为不同的资源做这件事,但它不会缩放。 – noctonura 2010-02-11 01:03:35