java – 测试这个的最佳方法是什么?具有4个位置的二进制数字

前端之家收集整理的这篇文章主要介绍了java – 测试这个的最佳方法是什么?具有4个位置的二进制数字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑Web表面上的4个输入字段A,B,C和D.用户可以任意填写任何这些.如何填充这些字段有16种组合.允许的是:
A B C D
-------
1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1

其中1表示不为null,0表示null.

我正在使用jsf的MVC模式.我不希望逻辑在视图中,而是在控制器中.在Java中检查这个的最佳方法是什么?

到目前为止,我实施了两个解

解决方案1:

@Override
public boolean isInputInvalid(Integer a,Integer b,Integer c,Integer d) {
    if (isNotSet(a) && isNotSet(b) && isNotSet(c) && isNotSet(d) {
        return true;
    }
    return (firstParameterDoesNotExistAndSecondDoesExist(a,b)) || (firstParameterDoesNotExistAndSecondDoesExist(b,c)) || (firstParameterDoesNotExistAndSecondDoesExist(c,d));
}

private boolean firstParameterDoesNotExistAndSecondDoesExist(Integer firstParameter,Integer secondParameter) {
    return isNotSet(firstParameter) && !isNotSet(secondParameter);
}

private boolean isNotSet(Integer parameter) {
    return parameter == null;
}

解决方案2:

public boolean isInputValid(Integer a,Integer d) {
    if (exists(a) && !exists(b) && !exists(c) && !exists(d) || //
            exists(a) && exists(b) && !exists(c) && !exists(d) || //
            exists(a) && exists(b) && exists(c) && !exists(d) || //
            exists(a) && exists(b) && exists(c) && exists(d)) {
        return true;
    }
    return false;
}

private boolean exists(Integer level) {
    return level != null;
}

注意:

第一种方法检查输入是否无效,而第二种方法检查输入是否有效(注意方法名称).

我写了16个单元测试用例,两个版本都运行绿色.

您是否有任何关于如何使代码更具可读性的提示/技巧/窍门?

解决方法

Valid combinations are: 1000,1100,1110 and 1111

如果您只关心可读性:

public static List<String> validOptions = Arrays.asList("1000","1100","1110","1111");

public boolean isValid(Integer a,Integer d)
{
    StringBuilder sb = new StringBuilder();
    sb.append(a==null ? 0 : 1); 
    sb.append(b==null ? 0 : 1),sb.append(c==null ? 0 : 1); 
    sb.append(d==null ? 0 : 1);
    return validOptions.contains(sb.toString());
}

请注意,这不是最快或最干净的解决方案(浪费一些cpu和内存)

原文链接:https://www.f2er.com/java/129989.html

猜你在找的Java相关文章