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