[英]How can I write a Junit test using assertEquals to see how many of each coins will be returned to me using?
我需要使用assertEquals編寫一個測試,以查看在給錢后將退還給我的每個硬幣有多少,並且不確定如何構造它或包含哪些信息。 可以插入$ 1,$ 2,$ 5和$ 10的金額。 返回的零錢必須使用最少的硬幣。
import java.math.BigDecimal;
public class MakeChange {
BigDecimal numOfQuarters = new BigDecimal(0.00);
BigDecimal numOfDimes = new BigDecimal(0.00);
BigDecimal numOfNickels = new BigDecimal(0.00);
BigDecimal quarter = new BigDecimal(0.25);
BigDecimal dime = new BigDecimal(0.10);
BigDecimal nickel = new BigDecimal(0.05);
public MakeChange() {
}
public String changeAmount(BigDecimal amtToReturn) {
while (amtToReturn.compareTo(quarter) >= 0) {
numOfQuarters = amtToReturn.divideToIntegralValue(quarter);
amtToReturn = amtToReturn.subtract(numOfQuarters.multiply(quarter));
}
while (amtToReturn.compareTo(dime) >= 0) {
numOfDimes = amtToReturn.divideToIntegralValue(dime);
amtToReturn = amtToReturn.subtract(numOfDimes.multiply(dime));
}
while (amtToReturn.compareTo(nickel) >= 0) {
numOfNickels = amtToReturn.divideToIntegralValue(nickel);
amtToReturn = amtToReturn.subtract(numOfNickels.multiply(nickel));
}
return "You will receive: " + numOfQuarters + " Quarters " + numOfDimes + " Dimes and " + numOfNickels
+ " Nickels.";
}
}
簡單地說:您必須編寫可測試的代碼才能測試代碼。
當然,您可以從此方法返回的字符串中解析該信息。 但這將是錯誤的方法。
事實是:您的代碼在這里混合了兩個職責:A)計算退還硬幣的方式/方式B)將其轉化為人類可讀的消息。
換句話說:您首先編寫了另一種方法,該方法返回可以由計算機輕松測試的內容。 例如,通過創建一個代表變化的類,例如:
public class Change {
public int getNumberOfQuaterts() { ...
public int getNumberOfDimes() { ...
...
現在,您可以將方法更改為:
public Change changeAmount(BigDecimal amtToReturn) { ...
現在測試變得非常容易:
Change change = new MakeChange().changeAmount(...
assertThat(change.getNumberOfQuarters, is(5));
除此之外:
Change
類中@Override toString()
-創建該可讀的消息。 您還可以編寫簡單的測試用例,然后在其中實際檢查一些預定義的Change是否產生了一些您希望代表該對象的確切字符串。 BigDecimal("0.01")
! (請參閱此處 )。 @deprecated
構造器是有原因的 ! 最后:您還可以在Change類中使用@Override equals()
,然后將測試代碼簡化為:
assertThat(underTest.changeAmount(whatever), is(new Change(....))
您可以使自己能夠手動創建允許進行相等性檢查的更改對象,以便可以使用assertThat()
直接比較更改對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.