C# 我如何通过测试来证明这是否短路?
考虑以下表达式:C# 我如何通过测试来证明这是否短路?,c#,C#,考虑以下表达式: if(!(A || B)) 我不确定这是否会以同样的方式短路 if(!A && !B) 会吗 如果是这样,我将如何编写一个测试来验证这一点?编写一个测试,其中a和B是返回布尔值并具有某种副作用的方法(例如设置属性)。然后,您的测试可以检查A是否设置了属性,而B没有设置属性。如果你不想要正式的测试,你可以使用类似.NETFiddle的东西 下面是一个简单的示例,说明您正在尝试执行的操作 在这种情况下,“短路”仅意味着当A为真时,您不计算B。一种简单的测试方法是
if(!(A || B))
我不确定这是否会以同样的方式短路
if(!A && !B)
会吗
如果是这样,我将如何编写一个测试来验证这一点?编写一个测试,其中
a
和B
是返回布尔值并具有某种副作用的方法(例如设置属性)。然后,您的测试可以检查A
是否设置了属性,而B
没有设置属性。如果你不想要正式的测试,你可以使用类似.NETFiddle的东西
下面是一个简单的示例,说明您正在尝试执行的操作
在这种情况下,“短路”仅意味着当A
为真时,您不计算B
。一种简单的测试方法是将B
设为一种方法,只要其计算结果为true
,就可以随意设置a
,然后查看是否调用了B
方法。您可以通过在调试器中运行代码并设置断点,或通过在B
中设置标志,或将其设置为控制台程序并在B
中调用console.WriteLine(“调用的B方法”)
或
我希望这足以让你明白这个想法
而且,作为记录,这两个表达式应该以完全相同的方式短路。也就是说,当A
为true
时,B
不会被计算。当涉及到逻辑和一些变量时,我喜欢使用真值表
因此,要做到这一点,您必须:
如果要进行单元测试断言,可以使用A和B的四种组合以及测试来查看这两种情况是否相等
要在C#和Visual Studio中使用单元测试,请右键单击要进行测试的方法,然后选择“创建单元测试”,如下所示:
这将创建一个仅用于单元测试的附加项目
在这种情况下,方法是等价的(a,b)根据所讨论的语句是否等价,返回true或false
因此,看看我们的单元测试代码,您可以这样填写测试方法:
[TestMethod()]
public void IsEquivalentTest()
{
Assert.IsTrue(Program.IsEquivalent(false, false));
Assert.IsTrue(Program.IsEquivalent(false, true));
Assert.IsTrue(Program.IsEquivalent(true, false));
Assert.IsTrue(Program.IsEquivalent(true, true));
}
该测试方法现在断言,对于A和B的每个输入组合,等效性测试方法是否返回true
如果是这样,我们就知道这些语句是等价的
要运行测试,请右键单击并选择“运行测试”。
这将打开测试资源管理器,它将指示所有断言都已通过
这与真值表相符。@MattL。如果第一个表达式为true
,则|
无需继续求值,因此它将短路@马特尔。“如果第一个操作数的计算结果为true,则第二个操作数将不计算。”@PeterDuniho,我和Joe Sewell的回答都不是针对OP,而是针对一个“Matt L”,他在随后删除了一条注释。他说,|
操作员总是评估两侧,从不短路。那句话不正确。@CraigW.:啊,我明白了。错过了'L'
。注意:我误解了这个问题!很抱歉。尽管如此,我还是会留下这个答案,以防万一它会帮助别人!