【问题标题】:How to create a HarnessTest class for java classes?如何为 java 类创建 HarnessTest 类?
【发布时间】:2020-06-06 19:15:10
【问题描述】:

我已经为我的应用程序创建了基本类。我正在尝试在 TestHarness 构造函数下为我的两个类运行手动单元测试,但遇到错误: 类中的构造函数 Person 不能应用于给定类型 必需:无参数 找到:字符串,字符串,整数 原因:实际参数列表和形式参数列表的长度不同

找不到符号 符号:方法 setLastName(String) 位置:Person 类型的变量 p1

这是我的 Person.java 类:

public class Person {
    private String firstName, lastName;
    private Integer age;



    public Person (String firstName, String lastName, Integer age) {
        this.firstName = firstName;
        if (firstName == "" || firstName == null)
            this.firstName = "No first name given";



        this.lastName = lastName;
        if (lastName == "" || lastName == null)
            this.lastName = "No last name given";


        this.age = age; 


    }

    public String getFirstName () {
        return firstName;
    }

    public void setFirstName (String firstName) {
        if (firstName == "" || firstName == null)
            this.firstName = "No first name given";
        else
            this.firstName = firstName;
    }

    public String getLastName () {
        return lastName;
    }

    public void setLastName (String lastName) {
        if (lastName == "" || lastName == null)
            this.lastName = "No last name given";
        else
            this.lastName = lastName;
    }

    public Integer getAge () {
        return age;
    }

    public void setAge (Integer age) {
            this.age = age;
    }

    @Override
    public String toString() {
    return "First Name: "+firstName + "\nLast Name : " + lastName +
            "\nAge: " + ((age<=0 || age>=120)? "No age given" : age); 
}
}

这是我的 Case.java 类:

public class Case {
     private String caseID ="" ;


public Case (String newCaseID) {
    this.caseID  = newCaseID; 
    if (caseID == "" || caseID == null)
            this.caseID = "No case ID given";
        else
            this.caseID = caseID;
}

public String getCaseID () {
    return caseID;
}

public void setCaseID (String newCaseID) {
    if (caseID == "" || caseID == null)
            this.caseID = "No case ID given";
        else
            this.caseID = caseID; 
}


@Override
public String toString() {
return "Case ID: "+ caseID;
        }
}

这是我的 TestHarness.java 类:

package HHHN;
/**
 *
 * @author 18057
 */

public class TestHarness {

    public TestHarness () {
    //Person test cases
    //Test 1 - valid first name
    Person p1 = new Person("","Smith",14);
    System.out.print("Person information: " + p1.toString());
    //change first name
    p1.setFirstName("Laura");
    System.out.println(p1.toString());


    //Test 2 - valid last name
    Person p2 = new Person("Laura","",14);
    System.out.print("Person information: " + p2.toString());
    //change last name
    p2.setLastName("Smith");
    System.out.println(p2.toString());

    //Test 3 - valid age
    Person p3 = new Person("Laura","Smith",0);
    System.out.print("Person information: " + p3.toString());
    //change age
    p3.setAge(14);
    System.out.println(p3.toString());



    //Case test cases
    //Test 1 - valid caseID
    Case c1 = new Case("");
    System.out.println("Missing person case ID: "+c1.toString());
    //change case ID
    c1.setCaseID("V1234");
    System.out.print(c1.toString());

}
}

任何帮助将不胜感激。

如果需要任何其他信息,请告诉我。

【问题讨论】:

  • 我快速检查了代码,看起来没问题。你用的是什么IDE?或者你是如何编译代码的?我有预感你有一些用旧代码编译的类。
  • 我使用的是 Netbeans 11.1

标签: java unit-testing


【解决方案1】:

您的代码中有一些错误。我们可以从您的“TestHarness”课程开始:

Person p1 = new Person("", "Smith", 14);

你不能有重复的变量,所以第一个之后的每个 p1 必须有不同的名称(p2?)或者你可以像这样再次重用变量:

p1 = new Person("Laura", "", 14);

接下来,我们将代码放在您的“Person”类中。它不会导致错误,但毫无意义:

this.firstName = firstName;
    if (firstName == "" || firstName == null)
        this.firstName = "No first name given";
    else
        this.firstName = firstName;

可以改为:

this.firstName = firstName;
if (firstName == "" || firstName == null)
    this.firstName = "No first name given";

由于您已经设置了变量,因此您不需要为 else 情况再次设置它。

转到年龄,您不能将整数设置为字符串,因此您将无法像以前那样使该变量等于“未指定年龄”。相反,您可以更改 toString 方法以在其中包含 if 语句。

@Override
public String toString() {
    return "First Name: "+firstName + "\nLast Name : " + lastName +
        "\nAge: " + ((age <=0  || age >= 120 )? "No age given" : age); 
}

然后,当您设置年龄时,不要费心检查它是否在范围内,只需将其设置为给定的任何整数值即可。您的错误来自:

this.age = age; 
    if (age <=0  || age >= 120 )
        this.age = "No age given";    //<--- ERROR
    else
        this.age = age;

因为您不能将整数设置为字符串。希望这会有所帮助。

【讨论】:

  • 感谢您的帮助。我已经修改了代码。您如何解释 TestHarness 类中的错误?
  • 对于人 p1 = new Person("", "Smith",14);对于所有其他:p2、p3、c1 我有一个错误构造函数 Person 类 Person 不能应用于给定类型。
  • 我复制了您目前拥有的确切更新代码,它对我来说运行良好。在 TestHarness 类中的测试 2 和测试 3 的旁注中,您仍在使用 p1.toString() 当它应该是测试 2 的 p2 和测试 3 的 p3 时
  • 谢谢马特!好像我需要在另一个 IDE 上运行它。
  • Np。如果您还没有,那么我建议您尝试 Eclipse IDE。
猜你喜欢
  • 1970-01-01
  • 2013-07-05
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多