簡體   English   中英

使用EasyMock測試Observer的更新方法

[英]Test update method of Observer with EasyMock

我正在嘗試測試是否實現了Observer接口的類中的update方法。 我正在使用EasyMock來模擬ConcreteObserver,以便可以驗證他的更新功能是否已真正執行。

這是我的主題,可觀察類:

public class Subject extends java.util.Observable {

   public funcA() {
      ...
      notifyObservers(this,aVariable);
      ...
   }
}

我有以下類別的觀察者:

public class ConcreteObserver implements java.util.Observer {

   public ConcreteObserver(Subject subject) {
      subject.observer(this);
   }

   @Override
   public void update(Observable o, Object arg) {
   // TODO
   }
}

這是我的單元測試:

@Test
public void testUpdateFunction() {
   Subject subj = new Subject();
   ConcreteObserver mockedObserver = EasyMock.
                                     createMockBuilder(ConcreteObserver.class).
                                     withConstructor(subj).
                                     addMockedMethod("update").
                                     createMock();

   mockedObserver.update((Observable) EasyMock.anyObject(),EasyMock.anyObject());
   EasyMock.replay(mockedObserver);

   subj.funcA();

   EasyMock.verify(mockedObserver);
}

不幸的是,我收到以下錯誤:

驗證失敗:ConcreteObserver.update(,):預期:1,實際:0

有關如何解決此問題的任何想法?

如果您想測試ConcreteObserver ,請與您的Subject隔離進行測試; 如果您要測試Subject請按照以下步驟進行操作(假定EasyMockimport static值):

@Test
public void testUpdateFunction() 
{
  Subject subject = new Subject();

  Observer observer = createMock(Observer.class);
  observer.update(eq(subject), anyObject());
  replay(observer);   

  subject.observer(observer);
  subject.funcA();

  verify(observer);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM