我正在编写一些java代码来通过if-else检查多个条件。代码工作正常,但很难进行单元测试。
读取包含关键字conditionOne
,conditionTwo
或其他关键字的行。 hasConditionOneEnabled
和hasConditionTwoEnabled
是布尔值。
我的真实代码比提供示例有更多else if
个语句。
有人可以帮忙吗?或者给我一些提示如何缩短代码然后我可以更轻松地编写单元测试?感谢
boolean a = false;
boolean b = false;
if(line.contains("conditionOne")){
if(hasConditionOneEnabled){
a = true;
}else{
b = true;
}
}else if (line.contains("conditionTwo")){
if(hasConditionTwoEnabled){
a = true;
}else{
b = true;
}
}else{
a = true;
b = true;
}
if(a && b){
// do something 1
}else if(!a && b){
// do something 2
}else if(a && !b){
// do something 3
}else{
//both false, do nothing
}
答案 0 :(得分:2)
a和b不能同时为false。 在前两个if变量中,a将具有与相应的hasConditionXXEnabled相同的值,而b将被设置为相反的值。默认的else将两者都设置为true。
请考虑以下代码:
a = true;
b = true;
if(line.contains("conditionOne")){
a = hasConditionOneEnabled;
b = !a;
}
else if(line.contains("conditionTwo")){
a = hasConditionTwoEnabled;
b = !a;
}
if(a && b){
// do something 1
}
else if(b){
// do something 2
}
else{
// do something 3
}
答案 1 :(得分:0)
// test it on different line String input and different int value returned...
int xxx(String line) {
if(line.contains("conditionOne")){
status = hasConditionOneEnabled?0:1;
} else if (line.contains("conditionTwo")){
status = hasConditionTwoEnabled?0:1;
} else{
status = -1;
}
return status;
}
// test it base on different status value..
switch (status) {
case 0: ...;
case 1: ...;
default: ...;
}
但是,如果你的if-else模式在经过一些修改后可以连续重复,你可以为它创建不同的布尔函数。
答案 2 :(得分:0)
首先,a
和b
永远不会为假,因此您的上一个else
声明是多余的。
您的整套条件语句可以缩减为if - else if - else
块。您不需要变量a
和b
,因为您无论如何都要使用它们来做其他事情。除了模糊变量之外,a
和b
之类的名称会妨碍可读性。
让我先向您展示代码,然后我会引导您完成。
boolean lineContainsCond1 = line.contains("conditionOne");
boolean lineContainsCond2 = line.contains("conditionTwo");
boolean lineContainsNeitherCondition = !lineContainsCond1 && !lineContainsCond2;
boolean conditionsForSomething3 = (lineContainsCond1 && conditionOneEnabled) || (lineContainsCond2 && conditionTwoEnabled);
if(lineContainsNeitherCondition)
//do something 1 (Note: this is the same something 1 from your code)
else if(conditionsForSomething3)
//do something 3
else
//do something 2
您的代码中{p> lineContainsNeitherCondition
基本上a
和b
都是true
。
conditionsForSomething3
与a!b
相同。
如果 lineContainsNeitherCondition
和conditionsForSomething3
都是false
,我们可以得出以下结论:
lineContainsNeitherCondition
为false
,lineContainsCond1
为true
或lineContainsCond2
为true
lineContainsCond1
是true
:
在这种情况下,conditionOneIsEnabled
为true
或conditionOneEnabled
为false
。如果是true
,那么conditionFOrSomething3
不能是false
,如果它是false
,则会导致lineContainsCond && !conditionOneEnabled
为true
}导致原始代码中的b!a
,从而执行//something 2
。 案例2可以提出类似的论点:lineContainsCond2
是true
。
答案 3 :(得分:-1)
为什么不减少代码中if else语句的数量。
尝试使用返回布尔值的私有方法替换if else语句。尝试将以下方法或类似方法配合到上面的代码中。
看看mookito非常适合嘲笑和抄袭。如果你有一个包含大量对象的大型项目,那么你可以节省数小时的时间。
private boolean doesLineContainCondition(String line, String searchPhrase) {
if(line.contains(searchPhrase) {
return true;
} else {
return false;
}
}
private boolean hasConditionBeenEnabled(boolean condition) {
if(condition) {
a = true;
}
else {
b= true;
}
}