我被要求实现一种称为setLevel的方法。我还需要在MIN和MAX值之间抛出IllegalArgumentException(),这是我从上一个称为Hounsfield的类中获取的。它已连接到JUnit测试器,并且我通过了大多数测试,除了下面发布的测试之外,我不明白为什么。第一块代码是我的代码,第二块代码是失败的JUnit测试的代码。具体来说,行失败是“ fail(String.format(“新的HounsfieldWindow(%s,10)应该抛出异常”,级别))”。
编辑:我也将所有代码添加到了setLevel方法中。
public class HounsfieldWindow {
private int level, width;
public HounsfieldWindow(int level, int width) {
this.level = level;
this.width = width;
}
public HounsfieldWindow() {
this(0, 400);
}
public int getLevel() {
return level;
}
public int setLevel(int level) {
if (level < Hounsfield.MIN_VALUE || level > Hounsfield.MAX_VALUE) {
throw new IllegalArgumentException();
}
int data = this.level;
this.level = level;
return data;
}
@Test
public void test04_ctorThrowsOnBadLevel() {
final int[] BAD_LEVELS = { -10000, -1025, 3072, 9999 };
for (int level : BAD_LEVELS) {
try {
new HounsfieldWindow(level, 10);
fail(String.format("new HounsfieldWindow(%s, 10) should throw an exception", level));
} catch (IllegalArgumentException x) {
// ok
}
}
}
答案 0 :(得分:0)
您的单元测试实际上并未测试您声称的方法。看起来您的构造函数实际上应该在调用set level方法。就目前而言,构造函数可以在设置级别方法中定义的可接受参数之外设置级别,这似乎不是您想要的。
对构造函数的以下更改将修复您的测试。
public HounsfieldWindow(int level, int width) {
setLevel(level);
this.width = width;
}
答案 1 :(得分:-1)
您必须将fail语句放在catch块中