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

时间:2014-11-30 10:58:16

标签: java mocking mockito apache-zookeeper powermock

我创建了一个应用程序,其中我使用了zookeeper的asyncronous 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));
        }
    }
};

我读了很多关于如何编写模拟测试用例但在编写上述方法的模拟测试时仍面临问题。

我第一次写模拟测试

1 个答案:

答案 0 :(得分:1)

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

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