Hamcrest - 打印到控制台
Hamcrest - print to console
我正在测试一个名为 generateRandomByteInRange
的函数。
它失败了,我想看看它得到的确切值(不仅是它小于 -127)。
我尝试用 try - catch 包围断言,当它无法打印到控制台时却什么也没发生。
函数 -
byte generateRandomByteInRange(int minVal,int maxVal) {
Random rnd;
rnd = new Random();
return (byte) (rnd.nextInt(maxVal - minVal + 1) + minVal);
}
测试 -
@Test
public void generateRandomByteInRange() {
int res;
int minVal,maxVal;
minVal = 1;
maxVal = 3;
for (int i = 0; i < 100; i++) {
res = AF.generateRandomByteInRange(minVal, maxVal);
assertThat(res, is(both(greaterThanOrEqualTo(minVal)).and(lessThanOrEqualTo(maxVal))));
}
minVal = -127;
maxVal = 128;
for (int i = 0; i < 1000; i++) {
res = AF.generateRandomByteInRange(minVal, maxVal);
try {
assertThat(res, is(both(greaterThanOrEqualTo(minVal)).and(lessThanOrEqualTo(maxVal))));
} catch (Exception e) {
System.out.println(res);
}
}
}
测试失败,我收到以下消息(右侧)
Hamcrest 在报告您的价值方面并不总是做得最好。如果您仔细查看收到的断言消息(为强调而添加的粗体),您会发现 -128
实际上是有问题的值。您可以通过将 res = AF.generateRandomByteInRange(minVal, maxVal)
更改为某个错误的硬编码值(例如 res = 400
)并观察断言消息来确认这一点。
java.lang.AssertionError:
Expected: is (a value equal to or greater than <-127> and a value less than or equal to <128>)
but: a value equal to or greater than <-127> <-128> was less than <-127>
关于您捕获异常的尝试 - 虽然有些多余(见上文),但您的想法不错,但捕获了错误的异常。当断言失败时,将抛出 AssertionError
。这是一个未经检查的异常,因此它扩展了 java.lang.Error
而不是您试图捕获的 java.lang.Exception
。只需将其替换为 AssertionError
(或其基数之一 类)的显式捕获,就可以了。
我正在测试一个名为 generateRandomByteInRange
的函数。
它失败了,我想看看它得到的确切值(不仅是它小于 -127)。
我尝试用 try - catch 包围断言,当它无法打印到控制台时却什么也没发生。
函数 -
byte generateRandomByteInRange(int minVal,int maxVal) {
Random rnd;
rnd = new Random();
return (byte) (rnd.nextInt(maxVal - minVal + 1) + minVal);
}
测试 -
@Test
public void generateRandomByteInRange() {
int res;
int minVal,maxVal;
minVal = 1;
maxVal = 3;
for (int i = 0; i < 100; i++) {
res = AF.generateRandomByteInRange(minVal, maxVal);
assertThat(res, is(both(greaterThanOrEqualTo(minVal)).and(lessThanOrEqualTo(maxVal))));
}
minVal = -127;
maxVal = 128;
for (int i = 0; i < 1000; i++) {
res = AF.generateRandomByteInRange(minVal, maxVal);
try {
assertThat(res, is(both(greaterThanOrEqualTo(minVal)).and(lessThanOrEqualTo(maxVal))));
} catch (Exception e) {
System.out.println(res);
}
}
}
测试失败,我收到以下消息(右侧)
Hamcrest 在报告您的价值方面并不总是做得最好。如果您仔细查看收到的断言消息(为强调而添加的粗体),您会发现 -128
实际上是有问题的值。您可以通过将 res = AF.generateRandomByteInRange(minVal, maxVal)
更改为某个错误的硬编码值(例如 res = 400
)并观察断言消息来确认这一点。
java.lang.AssertionError: Expected: is (a value equal to or greater than <-127> and a value less than or equal to <128>) but: a value equal to or greater than <-127> <-128> was less than <-127>
关于您捕获异常的尝试 - 虽然有些多余(见上文),但您的想法不错,但捕获了错误的异常。当断言失败时,将抛出 AssertionError
。这是一个未经检查的异常,因此它扩展了 java.lang.Error
而不是您试图捕获的 java.lang.Exception
。只需将其替换为 AssertionError
(或其基数之一 类)的显式捕获,就可以了。