【问题标题】:Re-implementation of method which returns primitive type重新实现返回原始类型的方法
【发布时间】:2016-11-14 15:57:06
【问题描述】:

我需要用 EasyMock 重新实现一个模拟方法。该方法被定义为返回一个原始值。

对于模拟的重新实现方法,EasyMock 用户指南推荐这种方式:

  expect(l.remove(10)).andAnswer(new IAnswer<String>() {
    public String answer() throws Throwable {
      return getCurrentArguments()[0].toString();
    }
  });

这种方法不适用于我,因为我需要使用原始返回类型

在指南中,andDelegateTo 还有另一种方式。我需要使用andAnswer 方法,而不是andDelegateTo,因为:

  • 我模拟一个类,而不是一个接口
  • 当使用andDelegateTo 时,我必须创建模拟类型的匿名类,它将调用其构造函数之一,这不是我的选择。

【问题讨论】:

  • 尝试使用包装类型:int -> Integer, boolean -> Boolean 等
  • andAnswerandDelegateTo 是等价的。后者允许一个类型化的解决方案。如果你想监视一个班级,这可能很有用。
  • @Henri andAnswer 和 andDelegateTo 在用法上是不等价的:stackoverflow.com/questions/40640742/… 那里的任何 cmets 都会有用

标签: java unit-testing testing mocking easymock


【解决方案1】:

使用原始类型的包装类,例如:

List listMock = EasyMock.createMock(List.class);

EasyMock.expect(listMock.isEmpty()).andAnswer(new IAnswer<Boolean>() {

    @Override
    public Boolean answer() throws Throwable {
        return true;
    }
});

【讨论】:

  • 这是正确的答案。所有原始类型都可以包装在IAnswer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2018-08-27
  • 2015-05-06
相关资源
最近更新 更多