我正在学习VS单元测试并尝试过这个:
[TestMethod()]
public void calcTest()
{
double expected = 1.234F; // TODO: Initialize to an appropriate value
double actual;
actual = 1.234F;
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}
运行此测试方法时,它表示不确定???为什么?
更新:嗨,大家好,可以告诉我们不要比较花车,但业务要求就是它们,所以如果我需要比较它们该怎么办?
你是说在没有头痛的情况下测试浮动计算是不可能的吗?那么,如果测试是如此令人头疼的财务计算不是最好不进行测试吗?
看起来像是一个巨大的bug或设计缺陷在vs测试框架而不是:)正如这里所说的那样 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.assert.inconclusive%28VS.80%29.aspx
表示无法证明断言是真还是假。
因为我比较了2个相同的litteral确定它是真的!
答案 0 :(得分:17)
Assert.Inconclusive("Verify the correctness of this test method.");
现在您已拥有AreEqual
,您应该可以删除此Inconclusive
测试期间的任何失败(不包括您有意处理的异常)通常是终端,但传递的任何断言(如此处的AreEqual
)继续跑步所以第一次测试通过,然后最后一行将其标记为不确定。
答案 1 :(得分:8)
即使您已移除Assert.Inconclusive
,您仍可能遇到问题。
您正在测试两个浮点数的相等性,而通常使用计算值,您永远不会让它们完全相同。您需要检查实际值是否在预期值的可接受范围内:
Math.Abs(actual - expected) < 0.00001;
例如。
您的Assert.AreEqual(expected, actual);
在这种情况下有效,因为您为两个变量分配了相同的值。
答案 2 :(得分:2)
这不仅仅意味着AreEqual
通过,这意味着它被称为Assert.Inconclusive
,导致结果不确定?
来自the docs:
与Fail相似,表示 如果没有,断言是不确定的 检查任何条件。
如果您不希望结果具有包容性,请删除对Assert.Inconclusive
:)的调用
答案 3 :(得分:2)
自动UnitTest由VS生成,并告诉您创建一些要比较的操作。如果您将评论最后一个Assert命令,您将获得带有绿色标记的“Passed”,但您没有对其进行测试 您需要,如在注释中“初始化为适当的值”,并在最后一个断言“验证此测试方法的正确性”中。 初始化它们来自的预期值和实际值 例如,Expected是函数Add(x,y)的期望值,其中x = 2且y = 3。实际值应来自该功能。在这种情况下:
// Sample - Start
Expected = 2+3;
Actual = Add(2,3);
Assert.AreEqual(expected, actual);
// Sample - End
希望它有所帮助,我为此打破了几颗牙齿......; - )