子类

lsmd5eda  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(268)

我想对以下场景进行单元测试:

class Base {
  public void doWork(Consumer<Pipe> consumer) {
    try {
      Pipeline pipeline = acquirePipeline()
      consumer.accept(pipeline);
      pipeline.sync();
    } finally {
      unlock();
    }
  }
}

class Worker extends Base {
  // whatever...
}

class Service {
  private Worker worker = ..

  public void handle() {
    worker.doWork((p) -> {
      // run some code...
    };

  }

我的测试代码

class ServiceTest {
  public test() throws Exception {

     Worker worker = newMock(Worker.class);
     worker.whileLocked(any(Runnable));
     reply(worker);

     Service service = new Service(worker);
     service.handle();

     verify(worker);
  }
}

我有点嘲笑 Worker ,但为了 Service 为了跑得好,我不能嘲笑 doWork (我想),如果我不嘲弄它,我会得到 NullPointerException 当代码运行时 doWork 因为数据成员没有初始化。
你知道怎么处理这样的案子吗?

gmxoilav

gmxoilav1#

你能考虑使用 Mockito 而不是 EasyMock ?
在这种情况下,有一种方法可以在模拟类上调用实方法。

doCallRealMethod().when(worker).whileLocked(any(Runnable.class));

我不使用 EasyMock 我试着找些东西来帮忙,但是找不到。

相关问题