.net - 使用 dotCover 时测试结果不一致

标签 .net unit-testing nunit continuous-integration teamcity

我有一些带有单元测试的代码在调试版本中通过但在正确的发布版本中失败。但是,当使用 JetBrains dotCover 运行时,相同的测试会在调试和 Release模式下通过。

为了提供一些背景知识,这里是有问题的测试代码,只是为了让您了解发布构建失败的原因 - 这基本上是因为代码优化导致堆栈信息减少。

using System.Diagnostics;
using NUnit.Framework;

namespace DotCoverTest
{
    [TestFixture]
    public class TestLogger
    {
        [Test]
        public void GetCurrentClassLoggerReturnsLoggerWithOwningTypeName()
        {
            Assert.AreEqual(Logger.GetCurrentClassLogger(), GetType().Name);
        }
    }

    public class Logger
    {
        public static string GetCurrentClassLogger()
        {
            return new StackFrame(1, false).GetMethod().DeclaringType.Name;
        }
    }
}

编辑: 有什么想法可以设置我的构建,以便在使用或不使用覆盖工具的情况下获得相同的测试结果?

注意:最初发布此问题时认为这是 TeamCity 的问题,但事实并非如此。

最佳答案

我认为这里的主要问题是 Tail call optimization , 编译器折叠堆栈帧以提高性能。这仅在 Release模式下发生。

dotCover(与其他 .net 分析器一样)禁用了 CLR 的一些优化,防止结果受损 - 如果方法不执行,则很难计算方法执行...

我无法告诉您 NCover 是否未能克服优化,或以其他方式解决此问题,但我对 dotCover 非常确定。

关于.net - 使用 dotCover 时测试结果不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9017132/

相关文章:

c# - 将日期转换为 URL QueryString 并发送

.net - 使用 .NET Core 和 xUnit 同时针对多个框架的单元测试代码

python - Django 测试 - 'HTTP_USER_AGENT' 测试客户端的关键字参数无效

asp.net-mvc-4 - 使用 Kendo 对 ASP.NET MVC4 Controller 进行单元测试

c# - OpenCover 版本 4.6.519 抛出 System.InvalidProgramException : Common Language Runtime detected an invalid program

c# - 使用 Graphics.CopyFromScreen 以 150% 缩放截取屏幕截图

c# - 加里奥.Model.ModelException : An exception occurred while invoking a test driver

c# - 获取 Windows 服务的 PID

python - mock __main__

c# - 如何配置我的设置文件以使用单元测试?