2013-03-06 114 views
0

作为练习,我需要学习编写以下类的测试:JUnit类的测试资源

package bankAccount;

public class CurrentAccount { 

     int account[]; 
     int lastMove; 

     CurrentAccount() { 
      lastMove = 0; 
      account = new int[10]; 
     } 

     public void deposit(int value) { 
      account[lastMove] = value; 
      lastMove++; 
     } 

     public void draw(int value) { 
      account[lastMove] = value; 
      lastMove++; 
     } 

    public int settlement() { 
      int result = 0; 
      for (int i=0; i<account.length; i++) { 
        result = result + account[i]; 
       } 
       return result; 
     } 


     public static void main(String args[]) { 
       CurrentAccount c = new CurrentAccount(); 
        c.deposit(10); 
     } 
    } 

我是比较新的单元测试,以及大量的教程简单地介绍如何做简单的数学运算测试(例如加,减等)。任何人都可以推荐更好的资源来完成更复杂功能的单元测试吗?我是不是最好关闭使用

http://junit.sourceforge.net/javadoc/org/junit/Assert.html

,并从那里工作?

回答

1

您应该根据对象的规格进行测试,例如

  1. 什么是起始平衡?
  2. 我加了10英镑后余额是多少?
  3. 我可以去透支吗?

等所有上面应该写类之前指定的(否则,你怎么知道该写什么?)

我想创建一个测试方法,每一种方案,执行安装程序和行动,然后使用一个(或更多,如有必要)asserts确定一切正常。不要忘记,在某些情况下,您可能正在测试引发异常,因此您需要检查控制流程中的中断。那不会使用assert

这里是一个可能的例子(进口等略)

public void testBalanceAfterTenPoundDeposit() { 
    // note the interface/impl separation so I can test different 
    // implementations with the same interface (this is Test By Contract) 
    CurrentAccount ca = new CurrentAccountImpl(); 

    // check the starting balance 
    Assert.assertEquals(ca.settlement(), 0); 

    // deposit 
    ca.deposit(10); 

    // do I have £10 ? 
    Assert.assertEquals(ca.settlement(), 10); 
} 

要注意,这类测试应该被关注的黑盒组件(单元)上是很重要的。也就是说,测试对于实现应该是不可知的,你不会明确地测试数组的实现。我应该能够插入我自己的实现(或重写你的)并且测试应该保持工作(这是回归测试的原理)。

说了这么多,如果你知道的(例如,您的固定大小的阵列)的实施明显的局限性,你应该尝试,并强调(例如,在这种情况下,执行11个刀片)

+0

确定。推测起初的平衡会被列为浮动?代码在哪里?在开始时它会是正确的吗?随着超支,我最好是让它做一个System.out.println,当整体平衡低于0时显示一条错误信息? – 2013-03-06 10:43:07

+0

这些都是设计问题,而不是测试问题。我注意到您正在存储交易,并通过结算()方法得出余额,所以您没有*有一个起始余额,而不是结算()方法中的初始值。如果你透支,你会怎么做?这是一个规范问题。你可以抛出一个异常。或发出警报。或者只是接受它,并拥有另一个具有-ve余额的进程监视器帐户。 – 2013-03-06 10:48:06

+0

非常感谢。你能写出一个关于如何测试一个数组的样本测试(例如解决方案之一),以帮助我进行头部阵列测试? – 2013-03-06 10:48:50