考虑以下表达式:
if(!(A || B))
我不确定这是否会以与
相同的方式短路if(!A && !B)
是的吗?
如果是这样,我将如何编写测试来自行验证?
答案 0 :(得分:3)
编写一个测试,其中A
和B
是返回布尔值并具有某种副作用的方法(例如设置属性)。然后,您的测试可以检查A
设置属性,而B
没有。如果你不想进行正式的测试测试,你可以使用像.NET Fiddle这样的东西。
以下是您尝试做的简化示例。
答案 1 :(得分:1)
此上下文中的“短路”仅表示您在B
为A
时未评估true
。一种简单的测试方法是将B
作为方法,只要评估为A
,就可以true
制作B
,然后查看B
方法是否被调用。您可以通过在调试器中运行代码并设置断点,或在B
中设置标志,或者将其设置为控制台程序并调用Console.WriteLine("B method called")
来观察对B
的调用A
或......
我希望这足以让你明白这一点。
并且,为了记录,这两个表达式应该以完全相同的方式短路。即当true
为B
时,{{1}}不会被评估。
答案 2 :(得分:0)
当谈到逻辑和一些变量时,我喜欢使用真值表。
所以要做到这一点你会:
如果您要进行单元测试断言,可以使用A和B的四种组合并测试两种情况是否相等。
要在C#和Visual Studio中使用单元测试,请右键单击要测试的方法,然后选择"创建单元测试"像这样:
这将为单元测试创建一个额外的项目。
在这种情况下,方法 IsEquivalent(a,b)会返回 true 或 false ,具体取决于相关语句是否相同。< / p>
因此,查看我们的单元测试代码,您可以像这样填写测试方法:
[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 ,则此测试方法断言 强>
如果确实如此,那么我们知道这些陈述是等价的! p>
要运行测试,请右键单击并选择&#34;运行测试&#34;。 这应该打开Test Explorer,它应该表明所有的断言都已通过了!
这与真相表一致。