Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的代码没有通过JUnit对IllegalArgumentException的测试?_Java - Fatal编程技术网

Java 为什么我的代码没有通过JUnit对IllegalArgumentException的测试?

Java 为什么我的代码没有通过JUnit对IllegalArgumentException的测试?,java,Java,我被要求实现一个名为setLevel的方法。我还需要在最小值和最大值之间抛出一个IllegalArgumentException(),这是我从上一个名为Hounsfield的类中获取的。这是连接到JUnit测试仪的,除了我在下面发布的测试之外,我通过了大多数测试,我不明白为什么。第一块代码是我的,第二块是失败的JUnit测试的代码。具体来说,失败的行是“fail(String.format(“new hounsfieldwindoww(%s,10)应该抛出一个异常”,level))” 编辑:我已

我被要求实现一个名为setLevel的方法。我还需要在最小值和最大值之间抛出一个IllegalArgumentException(),这是我从上一个名为Hounsfield的类中获取的。这是连接到JUnit测试仪的,除了我在下面发布的测试之外,我通过了大多数测试,我不明白为什么。第一块代码是我的,第二块是失败的JUnit测试的代码。具体来说,失败的行是“fail(String.format(“new hounsfieldwindoww(%s,10)应该抛出一个异常”,level))”

编辑:我已经将所有代码添加到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
        }
    }
}
公共类Hounsfieldwindowo{
私有int级别、宽度;
公共猎犬栏(整数级,整数宽度){
这个水平=水平;
这个。宽度=宽度;
}
公共猎犬{
这(0400);
}
public int getLevel(){
回报水平;
}
公共整数设置级别(整数级别){
如果(级别Hounsfield.MAX_值){
抛出新的IllegalArgumentException();
}
int data=this.level;
这个水平=水平;
返回数据;
}
@试验
public void test04_ctorThrowsOnBadLevel(){
最终的整数[]坏的水平={-10000,-102530729999};
用于(整数级别:坏的\u级别){
试一试{
新Hounsfieldwindowo(10级);
失败(String.format(“new hounsfieldwindoww(%s,10)应引发异常”,级别);
}捕获(IllegalArgumentException x){
//嗯
}
}
}

您必须在catch块中放入fail语句

您必须在catch块中放入fail语句

您的单元测试实际上并没有测试您声称的方法。看起来您的构造函数实际上应该调用set-level方法。现在,构造函数可以将级别设置在可接受的参数之外在设定级别的方法内罚款,这似乎不是您想要的

对构造函数的以下更改应该修复您的测试

public hounsfieldwindoww(整数级,整数宽度){
setLevel(level);
这个。宽度=宽度;
}

您的单元测试实际上并没有测试您声称的方法。看起来您的构造函数实际上应该调用set-level方法。目前,构造函数可以将级别设置在set-level方法中定义的可接受参数之外,而set-level方法似乎不是您想要的

对构造函数的以下更改应该修复您的测试

public hounsfieldwindoww(整数级,整数宽度){
setLevel(level);
这个。宽度=宽度;
}

<代码> HunsField.MyValue和<代码> Hunsfield .Max值什么地方?<代码> SETLATE < /COD>被调用?考虑使用逐步调试来解决这个问题。在有问题的JUnit测试中,在方法调用上设置一个检查点,在调试模式下启动JUnit测试,您可以检查参数是否为函数。如果正确设置了
Hounsfield.X_值,如何计算条件,等等,那么receives就是预期的。实际上,JUnit测试中没有任何东西直接调用你的
setLevel
方法。
HounsfieldWindow(int,int)
构造函数做了什么?你检查过那里没有bug吗?注意JUnit 5(以及更高版本的4)具有
assertThrows
方法,该方法比try/fail更简洁:
assertThrows(illegargumentexception.class,()->new hounsfieldwindowo(级别10))什么是<代码> HunsField.MyValue和“代码> Hunsfield?Max值Value/Cult>?什么地方是代码> SETLASE 被调用?考虑使用分步调试来解决这个问题。在有问题的JUnit测试中,在方法调用上设置一个检查点,在调试模式下启动JUnit测试,您可以检查参数是否为函数。如果正确设置了
Hounsfield.X_值,如何计算条件,等等,那么n receives就是预期的。实际上,JUnit测试中没有任何东西直接调用你的
setLevel
方法。
HounsfieldWindow(int,int)
构造函数做了什么?你检查过那里没有bug吗?注意JUnit 5(以及更高版本的4)具有
assertThrows
方法,该方法比try/fail更简洁:
assertThrows(illegargumentexception.class,()->new hounsfieldwindowo(级别10))
。OP希望测试在遇到异常时通过。您可以始终在注释中添加预期的好建议,但这并不能回答问题。(此答案信息错误,会使他们的测试在100%的时间内失败)@test public void testFooThrowsIndexOutOfBoundsException(){boolean shorn=false;请重试{foo.doStuff();}catch(IndexOutOfBoundsException e){should=true;}assertTrue(should);}OP希望测试在获得异常时通过。您始终可以将预期值放在注释good advice上,但这并不能回答问题。(此答案信息错误,会使他们的测试在100%的时间内失败)@Test public void testFooThrowsIndexOutOfBoundsException(){boolean hown=false;try{foo.doStuff();}catch(IndexOutOfBoundsException e){hown=true;}assertTrue(hown);}欢迎:)[别忘了接受答案,这个问题就结束了]欢迎:)[别忘了接受答案,这样问题就结束了]