在比较预期调用和实际调用时忽略模拟对象的特定参数

时间:2013-03-07 16:14:30

标签: java easymock

我有一个课程如下:

public class MyClass{

  Connector con;

  public MyClass(Connector con){
     this.con= con;
  }

  public void save(Xyz xyz){
     //save 2 instances of xyz one with lastupdatetime as 0 and other with 
    // currenttimestamp
     xyz.setLastUpdateTime(0) ; a
     con.save(xyz) ;
     xyz.setLastUpdateTime(Calender.getInstance().getCurrentTimeInMillis() );

     con.save(xyz);   
  }

}

如何使用easymock编写测试用例。

问题是方法在运行时找到时间戳。它与模拟对象中的不同。我可以忽略Xyz类的特定参数

我可以指定在模拟时忽略特定属性的内容吗?

 Easymock.expect(con.save(xyz)).andReturn(something) ??

1 个答案:

答案 0 :(得分:0)

你能做的一些事情,如果我有选择,我会按照粗略的顺序做。

  1. 创建或查找包装Calendar调用的现有Clock类。然后,您可以提供一个模拟的时钟,它返回用户定义的时间,因此是可测试的。这是相当常见的,如果您不直接依赖静态方法,从可测试性的角度来看会更容易。

  2. 从类中获取getCurrentTime方法的时间,然后可以覆盖该方法。

  3. 编写自定义匹配器。示例:http://toddscodenotes.blogspot.com/2009/09/creating-easy-mock-custom-matcher.html

  4. 使用EasyMock.capture()来捕获调用。然后,您可以检查捕获对象中的字段。

  5. 查看EasyMock(PowerMock?)的扩展,它具有静态静态的能力。不确定这是否适用于此,因为你没有嘲笑日历。