无法覆盖1行如果声明 [英] Unable to Cover 1 Line in If statment
问题描述
private object ReadNextObject()
{
if (currentLine == null)
return null;
// Check to see if the next value is quoted
bool quoted = false;
if (currentLine.StartsWith("\""))
quoted = true;
// Find the end of the next value
string nextObjectString = "";
int i = 0;
int len = currentLine.Length;
bool foundEnd = false;
while (!foundEnd && i <= len)
{
// Check if we've hit the end of the string
if ((!quoted && i == len) // non-quoted strings end with a comma or end of line
|| (!quoted && currentLine.Substring(i, 1) == ",")
// quoted strings end with a quote followed by a comma or end of line
|| (quoted && i == len - 1 && currentLine.EndsWith("\""))
|| (quoted && currentLine.Substring(i, 2) == "\","))
foundEnd = true;
else
i++;
}
if (quoted)
{
if (i > len || !currentLine.Substring(i, 1).StartsWith("\""))
throw new FormatException("Invalid CSV format: " + currentLine.Substring(0, i));
i++;
}
nextObjectString = currentLine.Substring(0, i).Replace("\"\"", "\"");
if (i < len)
currentLine = currentLine.Substring(i + 1);
else
currentLine = "";
if (quoted)
{
if (nextObjectString.StartsWith("\""))
nextObjectString = nextObjectString.Substring(1);
if (nextObjectString.EndsWith("\""))
nextObjectString = nextObjectString.Substring(0, nextObjectString.Length - 1);
return nextObjectString;
}
else
{
object convertedValue;
StringConverter.ConvertString(nextObjectString, out convertedValue);
return convertedValue;
}
}
我需要对代码进行单元测试....
I Need to Unit Test Above Code....
if (i > len || !currentLine.Substring(i, 1).StartsWith("\""))
throw new FormatException("Invalid CSV format: " + currentLine.Substring(0, i));
i++;
无法掩盖抛出异常......我需要存根或模拟来覆盖这条线......
Not able to Cover Throw Exception...Do I Need Stub or Mock to Cover this Line...
如果是这样我怎么能这样做..
If so how can i Do that..
当前测试。
public void Test_ReadNextObject_19()
{
object returnValue = string.Empty;
try
{
privateClass.SetField("currentLine", "\"\"\"\"");
privateClass.GetField("currentLine").ToString()));
returnValue = privateClass.Invoke("ReadNextObject");
}
catch (FormatException ex)
{
returnValue = ex.Message;
}
}
当前测试用例SetField"" \" \ " \" \"" ..
Current Test Case SetField ""\"\"\"\"" ..
推荐答案
嗨ID GO,
< span style ="line-height:107%; font-family:'Segoe UI',sans-serif; font-size:10pt">>>
我需要Stub或Mock来覆盖这条线......
基于代码"私有对象ReadNextObject()... ",这是一种私人方法。你必须模仿这个私有方法。但是测试私有方法没有意义。因为
他们没有公共行为,除了可以通过定义类的公共方法访问的行为,他们的行为应该通过测试公共方法来测试。
是否有其他方法可以调用此私有方法?如果是这样,你可以从你调用的方法写,然后,就不需要模拟了。
另外,请看一下这个帖子"单元测试如何确认异常被抛出":
https://stackoverflow.com/questions/6125143/how-can-a-unit-测试 - 确认 - 例外 - 已被抛出
问候,
Judyzh
这篇关于无法覆盖1行如果声明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!