Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建以下方法的模拟测试_Java_Mocking_Mockito_Apache Zookeeper_Powermock - Fatal编程技术网

Java 如何创建以下方法的模拟测试

Java 如何创建以下方法的模拟测试,java,mocking,mockito,apache-zookeeper,powermock,Java,Mocking,Mockito,Apache Zookeeper,Powermock,我创建了一个应用程序,其中使用了zookeeper的异步api。我无法编写以下方法的模拟测试 public static void createAssignNode(String path, long endPointer) { zk.create(path, Bytes.toBytes(endPointer), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT,assignTaskWorkerC

我创建了一个应用程序,其中使用了zookeeper的异步api。我无法编写以下方法的模拟测试

public static void createAssignNode(String path, long endPointer) {
        zk.create(path, Bytes.toBytes(endPointer),
                ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT,assignTaskWorkerCallback,endPointer);
}

static AsyncCallback.StringCallback assignTaskWorkerCallback = new AsyncCallback.StringCallback() {
    public void processResult(int resultCode, String path, Object endPointer, String name) {
        switch (KeeperException.Code.get(resultCode)) {
            case CONNECTIONLOSS:
                LOG.error("Connection Loss");
                throw new IllegalStateException();
            case OK:
                LOG.info("My created task name: " + name);
                break;
            default:
                LOG.error("Something went wrong" + KeeperException.create(KeeperException.Code.get(resultCode), path));
        }
    }
};
我读了很多关于如何编写模拟测试用例的书,但在编写上述方法的模拟测试时仍然面临问题


我是第一次编写模拟测试

要编写测试,首先需要知道要测试的行为。如果您不能简洁地描述您正在测试的行为,那么您将无法编写简洁的测试用例


这段代码中唯一适合使用模拟进行测试的部分是测试您是否向zookeeper注册了回调。要测试这一点,您需要将模拟zookeeper实例注入zk变量。对于您当前的设计,这可能很棘手,因为您已经将其设置为静态。如果zk是注入到构造函数中的实例成员,那么您可以很容易地在测试用例中用模拟对象替换它。

您想测试什么?测试上述方法是否正常工作如果zk是实例变量,那么我将如何编写测试用例。我很困惑,因为zookeeper的异步api。再次回到问题上来,如果你想测试什么。听起来你在试着测试zookeeper,把这项工作留给zookeeper开发人员。使用mock真正可以测试的就是正确调用zookeeper api,因此如果您注入mock,您可以验证您正在使用预期参数调用create方法。明白了。谢谢你如此耐心地回答我的问题。