以下是一个失败的单元测试,解释了我今天发现的错误:
[TestMethod]
public void WFT()
{
string configDebug = "false";
bool configDebugEnabled = bool.TryParse(configDebug, out configDebugEnabled);
Assert.AreEqual(false, configDebugEnabled);
}
这是如何让测试从红色变为绿色:
[TestMethod]
public void WFT()
{
string configDebug = "false";
bool configDebugEnabled;
bool.TryParse(configDebug, out configDebugEnabled);
Assert.AreEqual(true, configDebugEnabled);
}
我无法在C#规范中找到解释这一段的段落,但对这种行为很可能是一个不错的解释。任何人都可以向我解释为什么第一次测试失败了吗?
答案 0 :(得分:5)
因为如果解析成功,TryParse
方法总是返回true
,如果不成功,则false
。在第一种情况下,解析成功configDebugEnabled = true
,这不是你断言的。
顺便说一句,除非你写string configDebug = "true"
,否则第二次测试也会失败。
答案 1 :(得分:2)
它失败的原因是您使用相同的变量来存储TryParse
本身的成功或失败。由于解析成功(字符串确实转换为布尔值),您将使用false
覆盖返回的true
值。
答案 2 :(得分:1)
因为bool.TryParse的返回参数是“true”,如果它能够进行转换 - 返回参数不是转换的结果。
你用bool.TryParse()本身的返回来覆盖结果(在out参数中)。
答案 3 :(得分:1)
在这一行
bool configDebugEnabled = bool.TryParse(configDebug, out configDebugEnabled);
变量configDebugEnabled首先设置为false(作为解析的结果),但紧接在after之后设置为true(因为如果解析成功,则TryParse返回true)。为什么不直接使用bool.Parse?
答案 4 :(得分:0)
为什么您希望out参数返回true
?
答案 5 :(得分:0)
bool.TryParse返回一个bool来指定解析是否成功。您将该结果分配给放在out参数中的相同bool变量。
您需要一个单独的变量来测试函数是否成功。
答案 6 :(得分:0)
您可以从返回值和out参数中分配变量configDebugEnabled
。
如果变量在结尾处为false,则您不知道解析是否失败或解析的值是否为false。
这样做:
bool IsOk;
bool configDebugEnabled = bool.TryParse(configDebug, out IsOk);