说明:学习JMock官网的Getting Started的笔记

例子:为测试publish/subscribe发布/订阅信息系统的publisher(发布者),mock subscriber(订阅者)对象

接口subscriber如下:

  interface Subsciber {

    void receive(String message);

  }

1. 引用Jar包

  必须包:  jmock-2.6.1.jar, hamcrest-core-1.3.jar, hamcrest-library-1.3.jar

  注意: 添加的时候,注意把JUnit4的order放到最后。因为junit4它自己带了一个Hamcrest jar。 
      要是不注意顺序的话,有可能报 java.lang.SecurityException: class "org.hamcrest.TypeSafeMatcher"'s signer information does not match signer information of other classes in the same package。

2. 编写测试类

  注:使用的是测试框架是JUnit4

方式1:

public class TestPublisher {
  private Mockery context = new Mockery();

  @Test
  public void testOneSubscriberReceivesAMessage(){
    Publisher publisher = new Publisher();

    final Subscriber subscriber = context.mock(Subscriber.class);
    publisher.add(subscriber);

    final String message = "message";

    //定义预期行为
    context.checking(new Expectations(){
      {
        oneOf(subscriber).receive(message);
      }
    });

    publisher.publish(message);//调用被测试的方法
    context.assertIsSatisfied(); //验证定义的预期行为是否执行了。 如果该测试方法是异常测试,则该方法会失效
  }
}

方式2:

使用注解@RunWith(JMock.class)和JUnit4Mockery代替了需要在每个测试方法中调用context.assertIsSatisfied(),并转换了错误,如下:

@RunWith(JMock.class)

public class TestPublisher {
  private Mockery context = new Junit4Mockery();

  @Test
  public void testOneSubscriberReceivesAMessage(){
    Publisher publisher = new Publisher();

    final Subscriber subscriber = context.mock(Subscriber.class);
    publisher.add(subscriber);

    final String message = "message";

    //定义预期行为
    context.checking(new Expectations(){
      {
        oneOf(subscriber).receive(message);
      }
    });

    publisher.publish(message);//调用被测试的方法
    context.assertIsSatisfied(); 
  }
}

方式3:

使用JUnitRuleMockery和注解@Rule代替了@RunWith(JMock.class)和JUnit4Mockery

public class TestPublisher {

  @Rule
  public JUnitRuleMockery = new JUnitRuleMockery(); //必须为public

  @Test
  public void testOneSubscriberReceivesAMessage(){
    Publisher publisher = new Publisher();

    final Subscriber subscriber = context.mock(Subscriber.class);
    publisher.add(subscriber);

    final String message = "message";

    //定义预期行为
    context.checking(new Expectations(){
      {
        oneOf(subscriber).receive(message);
      }
    });

    publisher.publish(message);//调用被测试的方法
  }
}

最新文章

  1. 用直接路径(direct-path)insert提升性能的两种方法
  2. Java 基础之-枚举
  3. 素数筛 poj 3518
  4. Yocto开发笔记之《驱动调试-华为3G模块》(QQ交流群:519230208)
  5. Linux 时钟与计时器
  6. Oracle 中取当前日期的上个月最后天和第一天
  7. iOS9 class dump header
  8. 嵌入式开发笔记 - U-Boot相关
  9. js获取屏幕(设备)宽高
  10. ExtJs3常用控件操作实例
  11. python re模块findall()详解
  12. 灵活使用 console 让 js 调试更简单
  13. centos7下安装docker(17.2docker监控---weave scope)
  14. IDEA中的常用设置
  15. C# .NET ToList()分页
  16. nginx 刷新显示404
  17. 2015年第六届蓝桥杯C/C++程序设计本科B组决赛 完美正方形
  18. 设计模式(21)--Strategy(策略模式)--行为型
  19. time使用方法
  20. 洛谷P1415 拆分数列

热门文章

  1. 华为云+NextCloud(私人云盘搭建)
  2. angularjs中$parse的用法
  3. Hook集合----SSDTHook(x86 Win7)
  4. 初识ASP.NET CORE
  5. WordPress 迁移站点更换域名为新域名
  6. iOS自动化环境搭建(超详细)
  7. UVA - 548 根据中序遍历和后序遍历建二叉树(关于三种遍历二叉树)
  8. Api接口幂等设计
  9. Python基础 | pandas中dataframe的整合与形变(merge & reshape)
  10. HTML 基础(五)