【问题标题】:java easymock: Can I invoke another method when a mock is called?java easymock:调用模拟时可以调用另一个方法吗?
【发布时间】:2019-09-05 07:38:32
【问题描述】:

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

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");

有什么方法可以在调用模拟时执行 Invoke 操作?

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");

想看看有没有更好更干净的方法。

【问题讨论】:

    标签: java unit-testing mocking easymock


    【解决方案1】:

    我找到了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);  
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多