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和内存)

相关文章

本文从从Bitcask存储模型讲起,谈轻量级KV系统设计与实现。从...
内部的放到gitlab pages的博客,需要统计PV,不蒜子不能准确...
PCM 自然界中的声音非常复杂,波形极其复杂,通常我们采用的...
本文介绍如何离线生成sst并在线加载,提供一种用rocksdb建立...
验证用户输入是否正确是我们应用程序中的常见功能。Spring提...
引入pdf2dom &lt;dependency&gt; &lt;groupId&a...