x(string)= y(string) != ? y : string.empty
如何使用Assert语句
获得上述行的100%代码覆盖率我们尝试过使用: Assert.AreEqual(Actualvalue,ExpectedValue); 但是我们在某个地方缺少代码覆盖率
答案 0 :(得分:1)
基本上,如果您的整个代码只是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);
}
然而,两种appraoches在代码覆盖方面都是相同的。这取决于实际情况如何实现代码覆盖。但是你没有提供实际情况,因此我们无法回答这个具体问题。
编辑:由于你还提供了Rhino-mocks(我不熟悉),我假设你传递了什么,因为条件是由你想要模拟的方法返回的。因此,一旦返回通过条件并且返回失败条件,就嘲笑此方法。答案 1 :(得分:1)
如果您正在做的事情,那么您真的不应该瞄准100%的代码覆盖率。没有正确测试任何东西的单元测试是浪费时间和可维护性。
为了对三元运算符进行全面测试(100%),您需要测试所有条件。
考虑一个简单的布尔变量'isMorning',当true返回'Morning'时,false返回'Afternoon'。您需要编写一个测试,其中'isMorning'设置为'true',因此预期结果为'Morning',然后另一个测试将'isMorning'设置为'false',因此预期结果为'Afternoon'。
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之类的东西,它会突出显示未经测试的代码。