JUnit测试类的资源

时间:2013-03-06 10:31:23

标签: java 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 个答案:

答案 0 :(得分:1)

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

  1. 什么是起始平衡?
  2. 我加10英镑后的余额是什么?
  3. 我可以透支吗?
  4. 等。在编写课程之前应该指定以上所有内容(否则,你怎么知道写什么?)

    我会为每个场景创建一个测试方法,执行设置和操作,然后使用一个(或更多,如果需要)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次插入)