如何用JUnit测试这个类?

时间:2016-09-11 20:00:57

标签: java eclipse unit-testing testing junit

我必须为这个自动售货班做单元测试。我开始思考如何做到这一点,但我意识到自动售货类没有返回类型的方法(顺便说一句,我只知道如何测试返回类型的方法),而且我总是使用断言。

import java.util.Hashtable;

class VendingItem {
    double price;
    int numPieces;

    VendingItem(double price, int numPieces) {
        this.price = price;
        this.numPieces = numPieces;
    }

    void restock(int pieces) {
        this.numPieces = this.numPieces + pieces;
    }

    void purchase(int pieces) {
        this.numPieces = this.numPieces - pieces;
    }
}

/**
 * Class for a Vending Machine. Contains a hashtable mapping item names to item
 * data, as well as the current balance of money that has been deposited into
 * the machine.
 */
public class Vending {
    private static Hashtable<String, VendingItem> Stock = new Hashtable<String, VendingItem>();
    private double balance;

    Vending(int numCandy, int numGum) {
        Stock.put("Candy", new VendingItem(1.25, numCandy));
        Stock.put("Gum", new VendingItem(.5, numGum));
        this.balance = 0;
    }

    /** resets the Balance to 0 */
    void resetBalance() {
        this.balance = 0;
    }

    /** returns the current balance */
    double getBalance() {
        return this.balance;
    }

    /**
     * adds money to the machine's balance
     * 
     * @param amt
     *            how much money to add
     */
    void addMoney(double amt) {
        this.balance = this.balance + amt;
    }

    /**
     * attempt to purchase named item. Message returned if the balance isn't
     * sufficient to cover the item cost.
     * 
     * @param name
     *            The name of the item to purchase ("Candy" or "Gum")
     */
    void select(String name) {
        if (Stock.containsKey(name)) {
            VendingItem item = Stock.get(name);
            if (balance >= item.price) {
                item.purchase(1);
                this.balance = this.balance - item.price;
            } else
                System.out.println("Gimme more money");
        } else
            System.out.println("Sorry, don't know that item");
    }

}

您认为我可以测试打印某些内容的方法,例如?。

4 个答案:

答案 0 :(得分:2)

在大多数情况下,您应该测试逻辑。例如,您重置余额并检查它是否等于0或获得余额并保持其值然后使用addMoney方法并检查余额是否具有预期值。所有这些都可以通过assert方法完成。我希望这些解释有所帮助。

答案 1 :(得分:2)

怎么样:

@Test
public void testResetVendingBalance()  {
    Vending vending = new Vending(0,0);
    vending.addMoney(7);
    vending.resetBalance();
    assertEquals("Test if vending reset.",0, vending.getBalance(), 0);
}

@Test
public void testAddVendingBalance()  {
    Vending vending = new Vending(0,0);
    vending.addMoney(7);
    assertEquals("Test money amount.",7, vending.getBalance(), 0);
}

答案 2 :(得分:1)

将System.out重新分配给您可以测试的内容? 来自System的javadoc:

  

static void setOut(PrintStream out)
  重新分配&#34;标准&#34;输出流。

然后你可以验证它的价值。

答案 3 :(得分:0)

你应该问自己的问题是&#34;我到底要测试的是什么?&#34;在你的情况下,答案可能就像&#34;重新进货机器增加数量,购买减去数量&#34;。也许价格不会改变的测试值得拥有。

既然你有这个,问题是你需要什么来测试它?您的库存和价格的吸气剂可能会很好。