zoukankan      html  css  js  c++  java
  • JMock2入门

    说明:学习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);//调用被测试的方法
      }
    }

  • 相关阅读:
    leetcode 347. Top K Frequent Elements
    581. Shortest Unsorted Continuous Subarray
    leetcode 3. Longest Substring Without Repeating Characters
    leetcode 217. Contains Duplicate、219. Contains Duplicate II、220. Contains Duplicate、287. Find the Duplicate Number 、442. Find All Duplicates in an Array 、448. Find All Numbers Disappeared in an Array
    leetcode 461. Hamming Distance
    leetcode 19. Remove Nth Node From End of List
    leetcode 100. Same Tree、101. Symmetric Tree
    leetcode 171. Excel Sheet Column Number
    leetcode 242. Valid Anagram
    leetcode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/linnicke/p/4975924.html
Copyright © 2011-2022 走看看