2010-06-28 62 views
1

下面是一个失败的单元测试说明我今天发现了一个错误:out参数 - 为什么它不工作

[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

说实话,我不明白你的困惑。如果你解释了*为什么*你期望值'假',这将有所帮助。你知道什么'TryParse'返回? – 2010-06-28 12:01:33

+0

哈哈 - 当盯着太久的东西,你最终会失明:o) 我知道(并知道何时发布这个)如何TryParse的作品,但由于某种原因,它让我困惑的一天......暑假只有一天离开 - 认为我非常需要休息一段时间。 – kerbou 2010-07-01 17:54:03

回答

5

因为如果解析成功,TryParse方法总是返回true,如果不成功,则返回false。在第一种情况下,解析成功,所以configDebugEnabled = true这不是你所声称的。

顺便说一下,第二个测试也将失败,除非你写string configDebug = "true"

2

它失败的原因是您使用相同的变量来存储TryParse本身的成功或失败。当解析成功(字符串确实转换为布尔值)时,将覆盖返回的值falsetrue

0

为什么你会希望out参数返回true

1

因为如果bool.TryParse的返回参数能够进行转换,它的返回参数为“true” - 返回参数不是转换的结果。

你用bool.TryParse()本身的返回覆盖结果(在out参数中)。

0

bool.TryParse返回一个布尔值来指定解析是否成功。您正在将该结果分配给您输入out参数的相同bool变量。

您需要一个单独的变量来测试函数的成功。

0

您可以从返回值和out参数中分配变量configDebugEnabled。 如果最后变量为false,则不知道解析失败还是解析值为假。

这样来做:

1

在这一行

bool configDebugEnabled = bool.TryParse(configDebug, out configDebugEnabled); 

变量configDebugEnabled首先被设置为false(如解析的结果),但之后立即被设置为true (因为如果解析成功,TryParse返回true)。为什么不使用bool.Parse?

相关问题