0
我是新來的,大家好。我已經找了一些關於這方面的信息,並沒有找到任何東西,但我確定這很簡單,我失蹤了。我有一個簡單的程序,我試圖測試哪個使用鏈表數來執行算術。我的測試用例生成隨機的int值,並使用原始加法,減法,乘法來檢查答案。我現在看到的問題是,當我反覆運行測試時,原始操作返回的結果不正確,但是我的鏈表數字算術是正確的。內存中的變量是否有可能在重複的junit測試用例運行之間沒有清理?有時候它可以正常工作,有時它不會。java junit測試用例不一致
順便說一句我正在使用Eclipse和JUnit 4.這是我的測試代碼。謝謝你的幫助!
import static org.junit.Assert.*;
import java.util.Random;
import org.junit.Test;
public class NumberTest {
@Test
public void testRandomIntAddition1() {
Random generator = new Random();
int i = generator.nextInt();
int j = generator.nextInt();
Number a = new Number(""+i);
Number b = new Number(""+j);
Number sum = a.add(b);
System.out.printf("The first number is %d\n", i);
System.out.printf("The second number is %d\n", j);
System.out.printf("The primative sum is %d\n", i + j);
System.out.printf("The Number sum is %s\n\n", sum.toString());
assertEquals(sum.toString(),""+ (i+j));
}
@Test
public void testRandomIntSubtraction1() {
Random generator = new Random();
int i = generator.nextInt();
int j = generator.nextInt();
int k = i - j;
Number a = new Number(""+i);
Number b = new Number(""+j);
Number diff = a.subtract(b);
System.out.printf("The first number is %d\n", i);
System.out.printf("The second number is %d\n", j);
System.out.printf("The primative diff is %d\n", k);
System.out.printf("The Number diff is %s\n\n", diff.toString());
assertEquals(diff.toString(),"" + k);
}
}
這裏的示例輸出,顯示了原始的減法不正確的結果:
The first number is -504267212
The second number is 454054464
The primitive sum is -50212748
The Number sum is -50212748
The first number is 1820929887
The second number is -1488686395
The primitive diff is -985351014
The Number diff is 3309616282
這是否指向您的Number類中的問題? – 2013-03-14 15:30:41
我會*不*在你的測試中使用隨機生成的數字,順便說一句。它使追蹤問題非常困難。例如你可能會有一個數字組合觸發溢出條件,然後無法在調試器中的後續運行中重複該操作。 – 2013-03-14 15:31:58
嗨,Brian,感謝您的評論。我不這麼認爲。樣本輸出中的失敗是由基本java,i-j執行的減法運算。正如我計算的那樣,1820929887 - (-1488686395)= 3309616282.這是我的Number類的結果。我無法理解1820929887 - (-1488686395)= -985351014是如何發生的。結果似乎完全在左邊的領域。你不這麼認爲嗎?再次感謝。 – user2170433 2013-03-14 15:37:19