【发布时间】:2011-12-18 13:47:33
【问题描述】:
class Program
{
static void Main(string[] args)
{
var x = new Program();
Console.Write(x.Text);
Console.Write(x.Num);
//Console.Write(x.Num);//line A
}
private string Text_;
public string Text
{
get
{
return Text_ ?? (Text_ = "hello");//line B
}
}
private int? Num_;
public int Num
{
get
{
return (int)(Num_ ?? (Num_ = 42));//line C
}
}
}
我正在使用 Visual Studio 2010 来获取代码覆盖率结果。它表明 B 线被完全覆盖,而 C 线被部分覆盖。我希望 B 线也被部分覆盖,而不是被完全覆盖。 为什么代码覆盖率结果显示B行被完全覆盖了?
为了证明它对 Num 属性“正确”工作,取消注释行 A 并运行覆盖。它应该显示 C 行完全被覆盖。
当我将代码重写为更详细的形式(见下文)时,它可以正常工作并报告 Text_ 被部分覆盖。为了简洁起见,我更喜欢使用前者,并且想知道这两种形式是否也等价。提前致谢。
if (Text_ != null)
{
return Text_;
}
else
{
return Text_ = "hello";
}
【问题讨论】:
标签: c# visual-studio-2010 code-coverage