Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 easymock:调用mock时我可以调用另一个方法吗?_Java_Unit Testing_Mocking_Easymock - Fatal编程技术网

java easymock:调用mock时我可以调用另一个方法吗?

java easymock:调用mock时我可以调用另一个方法吗?,java,unit-testing,mocking,easymock,Java,Unit Testing,Mocking,Easymock,我想在调用特定的模拟方法时执行一些代码 mock = EasyMock.createMock(ConListener.class); // Record n Replay mock.Connected(); mock.DataSent(); EasyMock.replay(mock); sock = createCon(addr, mock) // I want the send to be called only after the mock's Connected() is invo

我想在调用特定的模拟方法时执行一些代码

mock = EasyMock.createMock(ConListener.class);

// Record n Replay
mock.Connected();
mock.DataSent();
EasyMock.replay(mock);


sock = createCon(addr, mock)

// I want the send to be called only after the mock's Connected() is invoked.
sock.send("data");
有什么方法可以在调用模拟时执行调用操作

mock.Connected().Invoke () //something like this? 
到目前为止,我得到的是

mock = EasyMock.createMock(ConListener.class);

// Record n Replay
mock.Connected();
mock.DataSent();
EasyMock.replay(mock);

CompletableFuture<Void> connected = new CompletableFuture<Void>();
sock = createCon(addr, new ConListener() {
   public void Connected() {
      mock.Connected();
      connected.complete(null);
   }

   public void DataSent() { mock.DataSent(); }
});
connected.get()
sock.send("data");
mock=EasyMock.createMock(ConListener.class);
//录音回放
mock.Connected();
mock.DataSent();
回放(模拟);
CompletableFuture connected=新的CompletableFuture();
sock=createCon(addr,new ConListener()){
公共关系网(){
mock.Connected();
已连接。完成(空);
}
public void DataSent(){mock.DataSent();}
});
连接。获取()
sock.send(“数据”);

想看看是否有更好更干净的方法。

我找到了
addDelegate
来解决我的问题。。不是那么清晰直观,但比我以前的方法稍微好一点

interface ConListener {
   void Connected();
   void DataSent(int size);
}

// Having it as a class, so that I can only add stub codes,
// for a particular method and leave the rest.

class TestListener implements ConListener {
   void Connected() {Assert.fail("")}
   void DataSent(int size) {Assert.fail("")}
}


@Test
public void SomeTest() {
   CompletableFuture<Void> connected = new CompletableFuture<Void>();
   mock = EasyMock.createMock(ConListener.class);

   // Record
   mock.Connected();
   EasyMock.expectLastCall().andDelegateTo(new TestListener() {
      public void Connected() {
        connected.complete(null);
      }
   });
  EasyMock.expectLastCall().times(1); // This cannot come before adding delegates. Why?
  EasyMock.replay(mock);

  // Test
  sock = createCon(addr, mock/*using actual mock*/);
  connected.get(timeout, unit);
  sock.send(blahblah);  

}
接口侦听器{
空连接();
void-DataSent(int-size);
}
//将它作为一个类,这样我只能添加存根代码,
//对于某个特定的方法,请保留其余方法。
类TestListener实现ConListener{
void Connected(){Assert.fail(“”}
void DataSent(int size){Assert.fail(“”)}
}
@试验
公共测试(){
CompletableFuture connected=新的CompletableFuture();
mock=EasyMock.createMock(ConListener.class);
//记录
mock.Connected();
EasyMock.expectLastCall()和DelegateTo(新TestListener()){
公共关系网(){
已连接。完成(空);
}
});
EasyMock.expectLastCall().times(1);//在添加委托之前不能执行此操作。为什么?
回放(模拟);
//试验
sock=createCon(addr,mock/*使用实际mock*/);
已连接。获取(超时,单位);
短袜发送(blahblah);
}