我对这段代码有一些问题。我收到此错误:: 检查是否在 getCandidateDetails 方法中正确抛出异常。尽管测试用例通过了 85%。
候选人.java
public class Candidate {
private String name;
private String gender;
private double expectedSalary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public double getExpectedSalary() {
return expectedSalary;
}
public void setExpectedSalary(double expectedSalary) {
this.expectedSalary = expectedSalary;
}
}
Main.java
import java.util.*;
public class Main{
public static void main (String[] args) {
/* code */
}
public static Candidate getCandidateDetails() throws InvalidSalaryException{
try{
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
String gender = sc.nextLine();
double expectedSalary = sc.nextDouble();
if(expectedSalary < 10000){
throw new InvalidSalaryException("Registration Failed. Salary cannot be less than 10000.");
}
Candidate c = new Candidate();
return c;
}catch(InvalidSalaryException ex){
return null;
}
}
}
InvalidSalaryException.java
public class InvalidSalaryException extends Exception{
public InvalidSalaryException(String str){
super(str);
}
}
答案 0 :(得分:3)
我不确定您的问题,但是:
<块引用>此代码有一些问题。我收到此错误::检查是否 在 getCandidateDetails 方法中正确抛出异常。 虽然 测试用例通过了 85%。
如果你的代码这样做(我缩进了它):
public static Candidate getCandidateDetails() throws InvalidSalaryException { // (1)
try{
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
String gender = sc.nextLine();
double expectedSalary = sc.nextDouble();
if(expectedSalary < 10000){
throw new InvalidSalaryException("Registration Failed. Salary cannot be less than 10000."); // (2)
}
Candidate c = new Candidate();
return c;
} catch (InvalidSalaryException ex) { // (3)
return null;
}
}
然后
InvalidSalaryException
null
之前捕获了异常。您应该不捕获异常并将其交给父调用者。
此外,如果您正在对这种方法进行单元测试,那么如果您使用 System.in
,就会遇到严重的麻烦。
答案 1 :(得分:2)
如果您想测试方法 <?xml version="1.0" encoding="UTF-8"?>
-<Root DotCoverVersion="2021.1.2" ReportType="Xml" CoveragePercent="97" TotalStatements="108" CoveredStatements="105">
-<Assembly CoveragePercent="94" TotalStatements="54" CoveredStatements="51" Name="ClassLibrary1">
-<Namespace CoveragePercent="94" TotalStatements="54" CoveredStatements="51" Name="ClassLibrary1">
-<Type CoveragePercent="94" TotalStatements="54" CoveredStatements="51" Name="Class1">
<Method CoveragePercent="100" TotalStatements="3" CoveredStatements="3" Name="Add(int,int):int"/>
<Method CoveragePercent="100" TotalStatements="16" CoveredStatements="16" Name="Armstrong(int):string"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Decision(int):int"/>
<Method CoveragePercent="79" TotalStatements="14" CoveredStatements="11" Name="isApplicable(int):string"/>
<Method CoveragePercent="100" TotalStatements="3" CoveredStatements="3" Name="sub(int,int):int"/>
<Method CoveragePercent="100" TotalStatements="13" CoveredStatements="13" Name="total(int):int"/>
</Type>
</Namespace>
</Assembly>
-<Assembly CoveragePercent="100" TotalStatements="54" CoveredStatements="54" Name="UnitTestProject2">
-<Namespace CoveragePercent="100" TotalStatements="54" CoveredStatements="54" Name="UnitTestProject2">
-<Type CoveragePercent="100" TotalStatements="54" CoveredStatements="54" Name="TestDemo">
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Add():void"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Armstrong_False():void"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Armstrong_InvalidNumber():void"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Armstrong_True():void"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Decision_False():void"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Decision_True():void"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_isApplicable_Applicable():void"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_isApplicable_NotValidAge():void"/>
<Method CoveragePercent="100" TotalStatements="5" CoveredStatements="5" Name="Test_Sub():void"/>
<Method CoveragePercent="100" TotalStatements="9" CoveredStatements="9" Name="Test_total():void"/>
</Type>
</Namespace>
</Assembly>
</Root>
是否创建了有效的对象/记录或抛出异常,请不要在内部捕获异常。
由于 getCandidateDetails()
,您可以使用 Java 15
来存储数据而不是类,以减少样板代码。
https://dzone.com/articles/a-first-look-at-records-in-java-14
record