zoukankan      html  css  js  c++  java
  • junit4中Assert断言的使用以及Mockito框架mock模拟对象的简单使用

      编写测试代码时,我们总会有我们对被测方法自己预期的值,以及调用被测方法后返回的真实执行后的值。需要断言这两个值是否相等、抛出异常、hash码等等情况。。。

    这里博主主要介绍一下简单的断言和mock。如果已经对junit测试有过相对了解的,请略过这篇文章。

    下面是我准备的节点类:

     1 package demo;
     2 
     3 /**
     4  * @author Lcc
     5  *
     6  */
     7 public class Node {
     8     private int value;
     9 
    10     public Node(int value) {
    11         this.value = value;
    12     }
    13 
    14     public String toString() {
    15         return "它本来的值是:" + value;
    16     }
    17 
    18     public int getValue() {
    19         return value;
    20     }
    21 
    22     public void setValue(int value) {
    23         this.value = value;
    24     }
    25 
    26 }

    以及节点类的冒泡排序算法:

     1 package demo;
     2 
     3 /**
     4  * @author Lcc
     5  * 
     6  */
     7 public class BubbleSort {
     8 
     9     public Node[] bubbleSort(Node[] a) {
    10 
    11         for (int i = 0; i < a.length; i++) {
    12             for (int j = 0; j < a.length; j++) {
    13                 if (a[i].getValue() > a[j].getValue()) {
    14                     Node temp = a[i];
    15                     a[i] = a[j];
    16                     a[j] = temp;
    17                 }
    18             }
    19         }
    20         System.out.println(a[1].toString());// 没有使用mock时输出:"它本来的值是:2
    21         return a;
    22     }
    23 
    24 }

    现在我们需要测试冒泡排序方法,当然由于这个方法比较简单其实不用mock也可以,但是博主一时间也想不出来有什么好的例子。如果有什么疑问,非常欢迎和博主讨论。

    现在使用没有mock的测试方法(实际情况下,不用mock的情况比较少。这里仅作为对比)

    package demo;
    
    import org.junit.Assert;
    import org.junit.Test;
    /**
     * @author Lcc
     * 
     */
    public class BubbleSortTest {
    
        BubbleSort bubbleSort = new BubbleSort();
    
        /**
         * bubbleSort的测试方法
         */
        @Test
        public void testBubbleSort() {
            
            Node node1 = new Node(1);
            Node node2 = new Node(2);
            Node node3 = new Node(3);
    
            Node[] nodes = {node1,node2,node3};
            
            bubbleSort.bubbleSort(nodes);
            Assert.assertEquals(3, nodes[0].getValue());
            Assert.assertEquals(2, nodes[1].getValue());
            Assert.assertEquals(1, nodes[2].getValue());
        }
    
    }

    这里解释一下assertEquals的作用:

    assertEquals([String message],Object target,Object result)  target与result不相等,中断测试方法,输出message
    assertEquals(a, b) 测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)
    assertEquals断言两个对象相等,若不满足,方法抛出带有相应信息的AssertionFailedError异常。

    其他具体的断言请参照  http://ryxxlong.iteye.com/blog/716428

    这里就不一一赘述了。

    下面我们来使用mock来测试这个方法:

     1 package demo;
     2 
     3 import org.junit.Assert;
     4 import org.junit.Test;
     5 import static org.mockito.Mockito.*;
     6 
     7 /**
     8  * @author Lcc
     9  * 
    10  */
    11 public class BubbleSortTest {
    12 
    13     BubbleSort bubbleSort = new BubbleSort();
    14 
    15     /**
    16      * bubbleSort的测试方法
    17      */
    18     @Test
    19     public void testBubbleSort() {
    20         
    21         Node node1 = new Node(1);
    22 //        Node node2 = new Node(2);
    23         Node mockNode2 = mock(Node.class);
    24         Node node3 = new Node(3);
    25 
    26         when(mockNode2.getValue()).thenReturn(2);
    27         when(mockNode2.toString()).thenReturn("现在输出的就是mock的调用when后你准备的值了");
    28         
    29         Node[] nodes = {node1,mockNode2,node3};
    30         
    31         bubbleSort.bubbleSort(nodes);
    32         Assert.assertEquals(3, nodes[0].getValue());
    33         Assert.assertSame(mockNode2, nodes[1]);//由于我们mock了node2.getValue()所以不能直接断言这个方法,应该断言它的hash码
    34         Assert.assertEquals(1, nodes[2].getValue());
    35     }
    36 
    37 }

    现在运行junit test 冒泡排序中的System.out.println输出的就是我们mock的值。mock简单的来说就是模拟,不是真实的去执行,而是在调用mock对象的时候返回一个你事先准备好的值,因此我们测试被测方法的时候仅需要准备这个方法调用的类。

    代码和文章写的不好,感谢浏览!希望这篇文章能够对各位有帮助。

  • 相关阅读:
    jar包依赖整理(一)
    centos 下 tomcat 内存不足引起的错误
    KendoUI 基础:Grid 绑定template展示
    C#读取XML文件的五个步骤
    C#winform向Txt文件传值,不重复录入且不清空
    JS页面赋值
    Python3---对象编程思想
    Python3---标准库---numpy
    Python3---标准库json
    Python3---标准库sys
  • 原文地址:https://www.cnblogs.com/Linccy/p/4736789.html
Copyright © 2011-2022 走看看