Assert 语句为 Rhino 模拟中的三元运算符
本文关键字:三元 运算符 语句 Rhino 模拟 Assert | 更新日期: 2023-09-27 17:55:48
x(string)= y(string) != ? y : string.empty
如何使用 Assert 语句获得上述行的 100% 代码覆盖率
我们尝试使用:Assert.AreEqual(Actualvalue,ExpectValue);但是我们在某处缺少代码覆盖率
如果这就是你所做的一切,你真的不应该以 100% 的代码覆盖率为目标。没有正确测试任何东西的单元测试是浪费时间和可维护性。
为了完全测试 (100%) 三元运算符,您需要测试所有条件。
考虑一个简单的布尔变量 'isMorning',当 true 返回 'Morning' 而 false 返回 'Afternoon' 时。您需要编写一个将"isMorning"设置为"true"的测试,因此预期结果是"Morning",然后另一个将"isMorning"设置为"false"的测试,因此预期结果是"下午"。
public void Test1() {
var isMorning = true;
var result = isMorning ? "Morning" : "Afternoon";
Assert.AreEqual("Morning", result);
}
public void Test2() {
var isMorning = false;
var result = isMorning ? "Morning" : "Afternoon";
Assert.AreEqual("Afternoon", result);
}
希望这有帮助。
仅供参考 - 如果您使用 JetBrains DOTCOVER 之类的东西,它将突出显示未经测试的代码。
基本上,
如果你的整个代码都是x = y != ... y : string.empty
你需要两个不同的测试用例,一个用于条件通过,一个用于失败。
这可以通过两种方式实现。一种是为每个案例创建一个测试方法:
string MethodToTest(string y) {
return y != /* whatever your condition is */ ? y : string.empty
}
[Test]
public void Test1() {
Assert.AreEqual(MethodToTest("PassingCondition"), "PassingCondition");
}
[Test]
public void Test2() {
Assert.AreEqual(MethodToTest("NotPassingCondition"), string.empty);
}
另一种方法是创建一个方法并向其添加TestCase
属性:
[TestCase("PassingCondition", Result = "PassingCondition")]
[TestCase("NotPassingCondition", Result = string.empty)]
public bool TheTest(string y) {
return MethodToTest(y);
}
但是,这两种应用在代码覆盖率方面是相等的。这取决于如何实现代码覆盖率的实际情况。但是你没有提供实际情况,使我们无法回答这个具体问题。
编辑:由于您还提供了Rhino-mocks(我不熟悉),因此我假设您传递的条件是由您想要模拟的方法返回的。因此,模拟此方法一次返回通过条件,一次返回失败条件。