【发布时间】: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,这意味着你会做你不需要做的事情
-
感谢您提供此信息。它通过反复试验来指导它通过测试。