gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:19:28 24 4
gpt4 key购买 nike

我有一些带有单元测试的代码在调试版本中通过但在正确的发布版本中失败。但是,当使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com