- OOMPA 2001 -

Exempel 1b: användning av JUnit (från föreläsning 2)

Koden från föreläsning 2 andra timmen. Finns också i katalogen /info/oompa01/SOURCE/EXAMPLES/Lecture2XP/testxx.
Som visar hur jag hade tänkt utveckla koden via fler exempel, lite refactoring osv.
OBSERVERA BankAccountTest2  och BankTestAll är  med för att illustrera
hur man kan köra flera tester samtidigt. Det finns också en del andra småsaker i koden, som att
explicit generera failure (fast bortkommenterat nedan).

Först utvidgade BankAccountTest

package testxx;

import junit.framework.*;

public class BankAccountTest extends TestCase {
  BankAccount account1, account2;
  double initialAmount;
  double transferAmount;
  String accountNumberOne, accountNumberTwo;
  public BankAccountTest(String name) {
  super(name);
  }

  protected void setUp() {
    initialAmount = 500.0;
    transferAmount = 125.0;
    accountNumberOne = "123";
    accountNumberTwo = "abc";
    account1 = new BankAccount(accountNumberOne);
    account2 = new BankAccount(accountNumberTwo, initialAmount);
   }

  public void testNewAccount() {
    this.assertEquals(account1.number(), accountNumberOne);
    this.assertTrue(account1.balance() == BankAccount.defaultStartAmount);
    this.assertEquals(account2.number(), accountNumberTwo);
    this.assertTrue(account2.balance() == initialAmount);
  }

  public void testDeposit() {
    account1.deposit(initialAmount);
    this.assertTrue(account1.balance() == BankAccount.defaultStartAmount +
initialAmount);
    account2.deposit(transferAmount);
    this.assertTrue(account2.balance() == initialAmount + transferAmount);
  }

  public void testWithdrawal() {
    account2.withdraw(transferAmount);
    this.assertTrue(account2.balance() == initialAmount - transferAmount);
  }

  public void testConstructorWithAmount() {
    this.assertTrue(account2.balance() == initialAmount);
  }

  public void testTransfer() {
    double oldAmount = account1.balance();
    account2.transferMoneyTo(transferAmount, account1);
    this.assertTrue(account1.balance() == oldAmount + transferAmount);
    this.assertTrue(account2.balance() == initialAmount - transferAmount);
  }

  /* new thing */
  public static Test suite(){
    return new TestSuite(BankAccountTest.class);
  }

  public static void main(String[] args) {
      junit.textui.TestRunner.run(BankAccountTest.class);
      //junit.swingui.TestRunner.run(BankAccountTest.class);
  }
}

För att illustrera hur flera tester kan köras på en gång konstruerade vi BankAccountTest2

package testxx;

import junit.framework.*;

public class BankAccountTest2 extends TestCase {
  BankAccount account1, account2;
  double initialAmount;
  double transferAmount;
  String accountNumberOne, accountNumberTwo;

  public BankAccountTest2(String name) {
  super(name);
  }

  protected void setUp() {
    initialAmount = 500.0;
    transferAmount = 125.0;
    accountNumberOne = "123";
    accountNumberTwo = "abc";
    account1 = new BankAccount(accountNumberOne);
    account2 = new BankAccount(accountNumberTwo, initialAmount);
  }

  public void testNewAccount() {
    this.assertTrue(account1.balance() == BankAccount.defaultStartAmount);
  }

  /* public void testFailure() {
    int[]  b1 = new int[2];
    try{ int tmp = b1[2];
        }
    catch(Exception e) {this.fail("Aja!");};
  }*/

  public static Test suite(){
    return new TestSuite(BankAccountTest2.class);
  }

  public static void main(String[] args) {
      junit.textui.TestRunner.run(BankAccountTest2.suite());
      //junit.swingui.TestRunner.run(BankAccountTest.class);
  }
}

Sen kör vi testerna från BankTestAll

package testxx;

import junit.framework.*;

public class BankTestAll {

  public static Test suite(){
    TestSuite suite = new TestSuite();
    suite.addTest(BankAccountTest.suite());
    suite.addTest(BankAccountTest2.suite());
    return suite;
  }
  public static void main(String[] args) {
      junit.textui.TestRunner.run(BankTestAll.suite());
  }
}

Nya BankAccount

Med kontonummer, klassvariabel som anger konstant värde, nya konstruktorer, osv.
package testxx;

public class BankAccount {
  protected double balance;
  protected final String number;
  public static double defaultStartAmount = 0.0;

  public BankAccount(String aNumber) {
    this(aNumber, defaultStartAmount);
  }
  public BankAccount(String aNumber, double amount) {
    number = aNumber;
    balance = amount;
  }

  public double balance() {
    return balance;
  }

  public void deposit(double amount) {
    balance = balance + amount;
  }

  public void withdraw(double amount) {
    balance = balance - amount;
  }

  public void transferMoneyTo(double amount, BankAccount anotherAccount) {
    this.withdraw(amount);
    anotherAccount.deposit(amount);
  }

  public String number() {
    return number;
  }

}

Björn


Sidansvarig: <bjorne@nada.kth.se>