당신의 숫자가 범람하고 있다는 사실 외에, 당신은 같은 테스트를 실행하는 JUnit을의 Parameterized
클래스에서 볼 수도 있습니다 :
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);
}
}
여기에 기본 공제에 대한 잘못된 결과를 보여줍니다 샘플 출력입니다 이. 그렇게하면 난수 쌍의 목록을 생성하고이를 더하기 및 빼기 테스트에 사용할 수 있습니다. 또한 테스트 수를 쉽게 변경하고 단일 테스트 대신 개별 테스트를 수행 할 수 있습니다.
@RunWith(Parameterized.class)
public class NumberTest {
static int trials = 100;
static int MAX_VALUE = 1 << 30; // To prevent overflow
@Parameters
public static Collection<Object[]> randomVals() {
Random rnd = new Random();
List<Object[]> stuff = new LinkedList<>();
for(int a = 0; a < trials; a++) {
stuff.add(new Object[] {rnd.nextInt(MAX_VALUE), rnd.nextInt(MAX_VALUE)});
}
return stuff;
}
int i, j;
public Number(int i, int j) {
this.i = i; this.j = j;
}
// Your tests here, using i and j above.
}
Number 클래스의 문제를 나타내지 않으세요? –
나는 btw 테스트에서 무작위로 생성 된 숫자를 사용하지 않을 것입니다. 문제를 추적하는 것이 매우 어렵습니다. 예 : 오버플로 조건을 유발하는 숫자의 조합을 가질 수 있으며 디버거에서 후속 실행에서 반복 할 수 없습니다. –
안녕하세요, Brian, 논평 해 주셔서 감사합니다. 나는 그렇게 생각하지 않는다. 샘플 출력의 실패는 기본 java, i - j에 의해 수행되는 빼기 연산입니다. 제가 계산할 때, 1820929887 - (-1488686395) = 3309616282입니다. 이것은 Number 클래스가 나온 결과입니다. 1820929887 - (-1488686395) = -985351014 Java 계산 방법을 이해할 수 없습니다. 결과는 왼쪽 필드에서 완전히 벗어난 것처럼 보입니다. 그렇게 생각하지 않아? 다시 한번 감사드립니다. – user2170433