Assert 语句为 Rhino 模拟中的三元运算符

本文关键字:三元 运算符 语句 Rhino 模拟 Assert | 更新日期: 2023-09-27 17:55:48

x(string)= y(string) != ? y : string.empty

如何使用 Assert 语句获得上述行的 100% 代码覆盖率

我们尝试使用:Assert.AreEqual(Actualvalue,ExpectValue);但是我们在某处缺少代码覆盖率

Assert 语句为 Rhino 模拟中的三元运算符

如果这就是你所做的一切,你真的不应该以 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(我不熟悉),因此我假设您传递的条件是由您想要模拟的方法返回的。因此,模拟此方法一次返回通过条件,一次返回失败条件。