问题
什么是基本/最重要的JUnit测试?是否有最佳实践或配方,对于刚刚进入TDD /单元测试的人来说是理想的?
背景
我对TDD&amp ;;感兴趣单元测试。试图更好地理解它&如何使用它。我一直在研究一些例子和他们得到了很多帮助。我正在尝试将单元测试过渡到我自己的工作中。我正在寻找游泳池的浅水区,基础知识,必需品。
我的问题如上所述,我在下面有一个应用程序示例,我将尝试实施一些测试。如果您也知道任何资源,您认为对于初学者来说理解何时和&为什么测试,请分享。
示例
我已经包含了3个我对测试感兴趣的Java类(Card,Deck,Wallet)。此外,我还包括3个Java测试类(CardTest,DeckTest,WalletTest),它们基本上是空的,除了包,导入,类和我正在考虑测试的注释掉的方法。如果你能提供一些非常有帮助的例子。
卡
package com.craigreedwilliams.game;
/**
* Created by Reed on 7/10/2015.
*/
public class Card {
private String rank;
private String suit;
private int rankInt;
// TODO: remove this if actually never used
private int suitInt;
//four argument constructor initializes Cards rank and suit (stings and ints)
public Card(String rank, String suit, int rankInt, int suitInt) {
super();
this.rank = rank;
this.suit = suit;
this.rankInt = rankInt;
this.suitInt = suitInt;
}
//getter method to return the rank value
public String getRank() {
return rank;
}
//getter method to return the suit value
public String getSuit() {
return suit;
}
//setter method to initialize the suit
public int getRankInt() {
return rankInt;
}
//return String representation of Card object
public String toString() {
return rank + " : " + suit;
}
}
甲板
package com.craigreedwilliams.game;
import java.util.Calendar;
import java.util.Random;
/**
* Created by Reed on 7/10/2015.
*/
public class Deck {
private final String rank[] = {"2","3","4","5","6","7","8","9","10","Jack","Queen","King", "Ace"};
private final String suits[]={"Hearts","Diamonds","Clubs","Spades"};
private final int rankInt[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
private final int suitsInt[] = {1, 2, 3, 4};
private Card deck[];
private final int MAX = 52;
private Random randNum;
//makes the deck, constructor - no arguments
public Deck() {
deck = new Card[MAX];
//uses calendar object to get time stamp
Calendar cal = Calendar.getInstance();
long seed = cal.getTimeInMillis();
randNum = new Random(seed); // random generated using time seed
// uses modulus operator
for(int i = 0; i < deck.length; i++ ){
deck[i] = new Card( rank[i % 13], suits[i / 13], rankInt[i % 13], suitsInt[i / 13]);
}
}
//shuffles the deck
public void shuffle(){
for(int i = 0; i < deck.length; i++ ){
int j = randNum.nextInt(MAX);
Card c = deck[i];
deck[i] = deck[j];
deck[j] = c;
}
}
//returns the individual card in the deck
public Card getCard(int index){
return deck[index];
}
//returns rankInt from the deck object at the given index value
public int getRankInt(int index) {
return rankInt[index];
}
}
钱包
package com.craigreedwilliams.game;
import java.util.Random;
/**
* Created by Reed on 7/11/2015.
*/
public class Wallet {
private double balance;
/**
* default Wallet constructor
*/
public Wallet() {
setRandomStartingBalance(50.0, 500.0);
}
private void setRandomStartingBalance(double minimum, double maximum) {
Random random = new Random();
double randomStartingBalance = minimum + (maximum - minimum) * random.nextDouble();
balance = randomStartingBalance;
}
public double getBalance() {
return balance;
}
public void deductFromBalance(double price) {
this.balance = balance - price;
}
}
CardTest
package com.craigreedwilliams;
/**
* Created by Reed on 7/11/2015.
*/
public class CardTest {
// public String getRank() {
// return rank;
// }
// public String getSuit() {
// return suit;
// }
// public int getRankInt() {
// return rankInt;
// }
// //return String representation of Card object
// public String toString() {
// return rank + " : " + suit;
// }
}
DeckTest
package com.craigreedwilliams;
import com.craigreedwilliams.game.Card;
/**
* Created by Reed on 7/11/2015.
*/
public class DeckTest {
// public void shuffle(){
// for(int i = 0; i < deck.length; i++ ){
// int j = randNum.nextInt(MAX);
// Card c = deck[i];
// deck[i] = deck[j];
// deck[j] = c;
// }
// }
// public Card getCard(int index){
// return deck[index];
// }
// public int getRankInt(int index) {
// return rankInt[index];
// }
}
电子钱包测试
package com.craigreedwilliams;
import org.junit.Test;
import java.util.Random;
import static org.junit.Assert.*;
/**
* Created by Reed on 7/11/2015.
*/
public class WalletTest {
// private void setRandomStartingBalance(double minimum, double maximum) {
// Random random = new Random();
// double randomStartingBalance = minimum + (maximum - minimum) * random.nextDouble();
// balance = randomStartingBalance;
// }
// public double getBalance() {
// return balance;
// }
// public void deductFromBalance(double price) {
// this.balance = balance - price;
// }
}