【发布时间】:2011-06-14 19:08:46
【问题描述】:
我们有一些单元测试在发布模式和调试模式下运行时会失败。如果我在发布模式下附加调试器,则测试通过。这里要发布的代码太多了,所以我真的只是在寻找调试发布模式问题的最佳实践。我已经检查了:
- DEBUG 和 RELEASE 预处理器指令,但我没有找到。
- Conditional Methods
解决方案:在这种情况下,这是因为我正在比较浮点变量是否相等。如果不进行重大重构,我无法将浮点数更改为十进制,因此我添加了一个扩展方法:
public static class FloatExtension
{
public static bool AlmostEquals(this float f1, float f2, float precision)
{
return (Math.Abs(f1 - f2) <= precision);
}
public static bool AlmostEquals(this float f1, float f2)
{
return AlmostEquals(f1, f2, .00001f);
}
public static bool AlmostEquals(this float? f1, float? f2)
{
if (f1.HasValue && f2.HasValue)
{
return AlmostEquals(f1.Value, f2.Value);
}
else if (f1 == null && f2 == null)
{
return true;
}
return false;
}
}
【问题讨论】:
-
几个问题。 1. 你在给这个问题一些“味道”时遇到了什么样的失败? 2.你检查过条件方法吗?
-
主要问题是 Equals 方法返回 false。但是,如果我单独接受每个语句,它们都会返回 true。如果我尝试附加调试器,问题就会消失。
-
是否与浮点相关(数据类型为双精度等)?
-
@Mark Byers 不,该应用是单线程的
-
@stefan 我正在比较 IsEqual 方法中的一些浮点值。