Java 没有分支的分支覆盖-我知道听起来很奇怪
我有一堆验证代码遵循以下模式:Java 没有分支的分支覆盖-我知道听起来很奇怪,java,c#,unit-testing,testing,code-coverage,Java,C#,Unit Testing,Testing,Code Coverage,我有一堆验证代码遵循以下模式: boolisbreak() { var isbreak=检查(…,“错误-1”) |检查(…,“错误-2”) ... |检查(…,“错误-n”); 如果(…) { IsBreak |=检查(…,“错误-1”) |检查(…,“错误-2”) ... |检查(…,“错误-n”); } 其他的 { IsBreak |=检查(…,“错误-1”) |检查(…,“错误-2”) ... |检查(…,“错误-n”); } // ... //可以有更多的if-else,甚至嵌套if-
boolisbreak()
{
var isbreak=检查(…,“错误-1”)
|检查(…,“错误-2”)
...
|检查(…,“错误-n”);
如果(…)
{
IsBreak |=检查(…,“错误-1”)
|检查(…,“错误-2”)
...
|检查(…,“错误-n”);
}
其他的
{
IsBreak |=检查(…,“错误-1”)
|检查(…,“错误-2”)
...
|检查(…,“错误-n”);
}
// ...
//可以有更多的if-else,甚至嵌套if-else
返回被破坏;
}
布尔检查(布尔条件,字符串消息)
{
如果(条件)
{
错误。添加(消息);
}
返回条件;
}
目标是执行所有检查,无论结果如何。然而,这段代码的问题是它不支持分支覆盖
一个简单的解决方法是用函数体回复
Check(bool,string)
,但这会产生另一个较小的问题,即代码混乱。我正试图找出一个解决方案,可以让我两全其美。有什么想法吗 如果重复验证(如果检查)太多且时间很短,则可以创建需要执行的检查字典。将此字典传递给方法,迭代字典中的项,并在发生验证错误时添加错误消息
示例代码:
class A
{
Dictionary<Func<A, bool>, string> dictOfChecks = new Dictionary<Func<A, bool>, string>()
{
//Example of checks , Error Message
{ (arg) => arg.ToString().Length < 3, "Length is smaller than 3" },
{ (arg) => arg.ToString().Length < 2, "Length is smaller than 2" },
};
public bool IsBroken()
{
//there you can enter multiple call of GetErrors to check whether there are some
var errors = GetErrors(dictOfChecks);
return errors.Length == 0;
}
public string[] GetErrors(Dictionary<Func<A, bool>, string> dict)
{
var errors = new List<string>();
foreach (KeyValuePair<Func<A, bool>, string> kvp in dict)
{
if (kvp.Key.Invoke(this))
errors.Add(kvp.Value);
}
return errors.ToArray();
}
}
A类
{
Dictionary dictOfChecks=新字典()
{
//检查示例,错误消息
{(arg)=>arg.ToString().Length<3,“长度小于3”},
{(arg)=>arg.ToString().Length<2,“长度小于2”},
};
公共图书馆坏了
{
//在那里,您可以输入GetErrors的多个调用来检查是否存在一些错误
var errors=GetErrors(dictOfChecks);
返回错误。长度==0;
}
公共字符串[]GetErrors(字典目录)
{
var errors=新列表();
foreach(dict中的KeyValuePair kvp)
{
if(kvp.Key.Invoke(this))
添加错误(kvp.Value);
}
返回错误。ToArray();
}
}
如果重复验证(如果检查)太多且时间很短,您可以创建需要执行的检查字典。将此字典传递给方法,迭代字典中的项,并在发生验证错误时添加错误消息
示例代码:
class A
{
Dictionary<Func<A, bool>, string> dictOfChecks = new Dictionary<Func<A, bool>, string>()
{
//Example of checks , Error Message
{ (arg) => arg.ToString().Length < 3, "Length is smaller than 3" },
{ (arg) => arg.ToString().Length < 2, "Length is smaller than 2" },
};
public bool IsBroken()
{
//there you can enter multiple call of GetErrors to check whether there are some
var errors = GetErrors(dictOfChecks);
return errors.Length == 0;
}
public string[] GetErrors(Dictionary<Func<A, bool>, string> dict)
{
var errors = new List<string>();
foreach (KeyValuePair<Func<A, bool>, string> kvp in dict)
{
if (kvp.Key.Invoke(this))
errors.Add(kvp.Value);
}
return errors.ToArray();
}
}
A类
{
Dictionary dictOfChecks=新字典()
{
//检查示例,错误消息
{(arg)=>arg.ToString().Length<3,“长度小于3”},
{(arg)=>arg.ToString().Length<2,“长度小于2”},
};
公共图书馆坏了
{
//在那里,您可以输入GetErrors的多个调用来检查是否存在一些错误
var errors=GetErrors(dictOfChecks);
返回错误。长度==0;
}
公共字符串[]GetErrors(字典目录)
{
var errors=新列表();
foreach(dict中的KeyValuePair kvp)
{
if(kvp.Key.Invoke(this))
添加错误(kvp.Value);
}
返回错误。ToArray();
}
}
想出了一个好的解决方案:
\=条件和附加(“错误”);
布尔追加(字符串错误)
{
错误。添加(错误);
返回true;
}
而这也可以写成if(condition)Append(“error”)
。在我们的情况下,块语句必须写成:
if (condition)
{
...
}
提出了一个确定的解决方案:
\=条件和附加(“错误”);
布尔追加(字符串错误)
{
错误。添加(错误);
返回true;
}
而这也可以写成if(condition)Append(“error”)
。在我们的情况下,块语句必须写成:
if (condition)
{
...
}
isbreak
不是真的需要:返回!errors.isEmpty()
也可以使用类似于列表的东西,并在列表中迭代,其中每个列表项封装一个,如果实际上不需要isbreak
:返回!errors.isEmpty()
还可以使用类似于列表的内容,并在列表中迭代,其中每个列表项封装了if
。