【问题标题】:Fault injection for .NET apps?.NET 应用程序的故障注入?
【发布时间】:2011-01-15 12:53:06
【问题描述】:

我想知道是否有人知道将常见故障自动注入正在运行的 .NET 程序的工具或技术。诸如此类的东西......

  • 在分配时随机注入 OutOfMemoryException
  • 在尝试访问文件时随机注入 FileNotFoundException
  • 在使用套接字时随机注入 IO 或网络异常。

所以我真的在寻找一种方法来拦截 CLR 中的某些特定调用,类似于 AppVerifier 对本机 Win32 代码所做的。目的是在开发人员无法控制的大量错误条件下测试应用,并确保处理这些条件。

【问题讨论】:

  • Sarcasm 拔掉你的内存?
  • 正是 :) 有很多技巧可以针对不同的资源执行此操作,但无法扩展。
  • 您不能在 .NET 运行时本身上运行 AppVerifier(或类似的东西)吗?

标签: .net clr fault intercept


【解决方案1】:

我不知道如何“随机”注入这些东西,但我建议您模拟出通常不受您控制的部分,并让模拟在您的某些测试中抛出异常。

【讨论】:

  • 我感觉他在谈论他想要验证的大量代码,所以我怀疑他是否能够重新设计所有这些代码以支持模拟。
  • 我会说这是他的问题,但我理解处理大型遗留代码库的困难。我看不到在不重构模拟的情况下正确测试这些场景的方法,但也许其他人会出现一些问题。
【解决方案2】:

Typemock Isolator 似乎是你最好的选择。

如果您想抛出FileNotFoundException 来模拟测试,您可以执行以下操作。

在你的生产代码中,你有这样的方法

public static Project OpenProject(string filePath)

在您的测试代码中,您可以像这样伪造OpenProject 调用

Isolate.WhenCalled(()=>Project.OpenProject(nulll)).WillThrow(new FileNotFoundException());

当您的代码命中OpenProject 时,将抛出FileNotFoundException

【讨论】:

    【解决方案3】:

    有一个名为 TestAPI 的 codeplex 项目可以进行运行时错误注入。您需要查看它的 managed code fault injection API。它使用CLR profiling API 在运行时拦截方法调用并修改它们的行为。

    查看an example,了解如何在已编译的 exe 中的方法调用上注入异常。

    【讨论】:

    • 我阅读了几个例子,我认为它看起来很有希望,而且它是免费的这一事实肯定会有所帮助。
    • 现在还有其他选择吗?
    【解决方案4】:

    这并不完全符合您的要求,但它是相关的,并且可能有助于实现改进应用中异常处理的同一目标。

    redgate 异常猎手 http://www.red-gate.com/products/Exception_Hunter/index.htm

    我没有使用过这个特定的产品,但我用过的其他 redgate 产品都很棒。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      相关资源
      最近更新 更多