【问题标题】:C# StackTrace for referenced projects from unit test来自单元测试的引用项目的 C# StackTrace
【发布时间】:2013-03-24 11:38:14
【问题描述】:

对于一个项目,我需要知道在单元测试结束时调用了多少方法。 (或者类似于 Visual Studio 中的调用层次结构(不是在运行时)。我为此创建了一个测试项目。但我只获取在单元测试项目中调用的方法。

例如,我有一个类库,其中包含以下类(程序集):

public  class Program
{
    public void A()
    {
        B();
        C();
    }

    public void B()
    {

    }

    public void C()
    {
        B();
        D();
    }

    public void D()
    {

    }
}

以及具有以下测试方法的单元测试(组装)

    [TestMethod]
    public void TestMethod1()
    {
        StackTrace stackTrace = new StackTrace();
        new Program().A();
        int count = stackTrace.FrameCount;
    }

    [TestMethod]
    public void TestMethod2()
    {
        StackTrace stackTrace = new StackTrace();
        new Program().C();
        int count = stackTrace.FrameCount;
    }

在两个单元测试中计数 = 12。当我检查 stackTrace 变量的属性时,我只看到单元测试程序集调用的方法。有没有办法将类库程序集的调用包含在 stackTrace 中?

提前致谢

【问题讨论】:

  • 构造堆栈跟踪对象将获取构造它的代码的堆栈跟踪,它不会收集它后面的代码的堆栈跟踪。这意味着在您的测试方法中,您会在每个测试方法的第一行获得构建堆栈跟踪对象的堆栈跟踪,该方法的其余部分对此堆栈跟踪没有影响。
  • 但是当我将 StackTrace 的构建放到 testmethod 的末尾时,结果仍然是一样的......
  • 是的...,因为它仍然只计算对您中的方法的调用。

标签: c# stack-trace


【解决方案1】:

您是否尝试过使用覆盖工具? (我会推荐dotCover

工具可以生成xmljson等格式的报告,以便您轻松解析并使用结果进行进一步计算。

【讨论】:

  • 这可以通过程序调用吗? (没有用户界面?)
  • 很遗憾,目前还没有SDK,但是,您可以通过编程方式调用dotCover进程没有问题
【解决方案2】:

看来您需要一个测试覆盖率工具。它将显示调用了测试程序集的哪些方法。 VisualStudio 内置了一个。

【讨论】:

  • 我想做的一件事是以编程方式获取这些信息,这样我就可以使用这些信息进行进一步的计算。这可能吗?
  • 测试覆盖率工具会为你做很多计算,提供有用的报告。如果你真的想拦截整个应用程序中的方法调用(计算调用次数),你可以使用 CLR 的 Profiling API 来实现。但是您可能需要为此编写大量代码。
猜你喜欢
  • 2017-01-19
  • 2012-04-12
  • 1970-01-01
  • 2014-07-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
相关资源
最近更新 更多