【问题标题】:Junit Test Keeps Failing with IllegalArgumentExceptionJunit 测试因 IllegalArgumentException 不断失败
【发布时间】:2021-02-08 04:26:39
【问题描述】:

我尝试过放置 try 和 catch 块以及 throw new IllegalArgumentException,但这些都不能阻止失败的测试。我在这里想念什么?谢谢。

package com.udacity.jdnd.course1.service;

public class FizzBuzzService {

    /**
     * If number is divisible by 3, return "Fizz". If divisible by 5,
     * return "Buzz", and if divisible by both, return "FizzBuzz". Otherwise,
     * return the number itself.
     *
     * @Throws IllegalArgumentException for values < 1
     */
    public String fizzBuzz(int number) {

        String result = "";
        try {
            if (number % 3 == 0 && number % 5 == 0) {
                result = "FizzBuzz";
            } else {
                if (number % 3 == 0) {
                    result = "Fizz";
                } else if (number % 5 == 0) {
                    result = "Buzz";
                } else {
                    return Integer.toString(number);
                }
            }

            if (number == 0){
                throw new IllegalArgumentException("Value is zero ");
            }

//            return result;
//        }
    } catch(IllegalArgumentException i){
      System.out.println("this what is thrown " + i);
    }

        return result;

    }


}
package com.udacity.jdnd.course1;

import com.udacity.jdnd.course1.service.FizzBuzzService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class Course1ApplicationTests {

    @Test
    void testFizzBuzz(){
        FizzBuzzService fbs = new FizzBuzzService();

        // check non-divisible numbers return themselves
        assertEquals("1", fbs.fizzBuzz(1));
        assertEquals("47", fbs.fizzBuzz(47));
        assertEquals("121", fbs.fizzBuzz(121));

        // check numbers divisible by 3
        assertEquals("Fizz", fbs.fizzBuzz(3));
        assertEquals("Fizz", fbs.fizzBuzz(333));

        //check numbers divisible by 5
        assertEquals("Buzz", fbs.fizzBuzz(5));
        assertEquals("Buzz", fbs.fizzBuzz(85));

        //check numbers divisible by 3 and 5
        assertEquals("FizzBuzz", fbs.fizzBuzz(15));
        assertEquals("FizzBuzz", fbs.fizzBuzz(75));

        //check invalid inputs
        assertThrows(IllegalArgumentException.class, () -> fbs.fizzBuzz(0));
        assertThrows(IllegalArgumentException.class, () -> fbs.fizzBuzz(-1));
    }
}

我得到的错误是:

org.opentest4j.AssertionFailedError: 应抛出 java.lang.IllegalArgumentException,但没有抛出任何异常。

at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:71)

【问题讨论】:

  • 你的问题是你在你的方法中捕获了你的异常,而不是抛出它。它正在被处理,测试永远不会注意到它。就您的测试而言,它从未发生过。另外:你可能想把 if (number == 0) 检查放在你的方法中,因为 a%3 ==0 将返回 true,这意味着你会做你不需要做的事情
  • 感谢您提供此信息。它通过反复试验来指导它通过测试。

标签: java exception


【解决方案1】:

通过将它放在开头并摆脱 try/catch 块

if (number == 0 || number == -1){
                throw new IllegalArgumentException("Value is zero ");
            }

【讨论】:

    猜你喜欢
    • 2012-05-27
    • 2019-05-01
    • 2011-07-23
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多