代码之家  ›  专栏  ›  技术社区  ›  Glide

EasyMock andReturn()与andStubReturn()的比较

  •  53
  • Glide  · 技术社区  · 14 年前

    使用 andReturn(T value) andStubReturn(T value) 为了EasyMock?

    andStubReturn() 哪里 andReturn() 不能达到同样的效果?

    2 回复  |  直到 11 年前
        1
  •  58
  •   Barend    14 年前

    在mock上使用stub返回一个方法调用,这个方法调用是您期望发生的,但在其他方面并不感兴趣。对“常规”方法调用使用常规返回。

    public void someMethod(String arg) {
        if (logger.isDebugEnabled()) {
            logger.debug("Calling doSomething() on service " 
                           + service.getName().hashCode());
        }
    
        service.postMessage("{" + arg + "}");
    
        if (logger.isDebugEnabled()) {
            logger.info("Finished calling doSomething() on service " 
                          + service.getName().hashCode());
        }
    }
    

    …在哪里 service 是一个可嘲弄的领域。这个 hashCode() log语句中的东西是人为的,但关键是mock需要响应任意数量的调用 getName() 为了避免一个NPE,而你不能不关心它。

    在为此方法编写基于EasyMock的单元测试时,您应该 andStubReturn() 呼叫 andReturn() 打电话给 postMessage(String)

        2
  •  6
  •   Ben    10 年前

    为清楚起见,另加说明。

    例如 不是 未调用模拟方法时断言;

    FooClass myFooClass = EasyMock.createNiceMock(FooClass.class);
    EasyMock.expect(myFooClass.someMethod(EasyMock.anyInt()).andStubReturn(true);
    EasyMock.replay(myFooClass);
    
    EasyMock.verify(myFooClass);
    

    威尔

    FooClass myFooClass = EasyMock.createNiceMock(FooClass.class);
    EasyMock.expect(myFooClass.someMethod(EasyMock.anyInt()).andReturn(true).atLeastOnce();
    EasyMock.replay(myFooClass);
    
    EasyMock.verify(myFooClass);