首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个狗类和测试器

创建一个狗类和测试器
EN

Stack Overflow用户
提问于 2013-11-18 17:23:43
回答 2查看 24.7K关注 0票数 0

你好,我被要求创建以下内容:

创建一个跟踪狗的狗类

  1. 名字
  2. 年龄
  3. 重量

有下列方法可供使用:

代码语言:javascript
复制
1. getName(): String
2. setName(String): void
3. getAge():int
4. getDogYears():int (assume 1 human year = 5 dog years)
5. addAYear():void
6. setAge(int):void
7. getWeight(): double
8. setWeight(double): void
9. getDogData():String

创建一个DogTester类来测试上述每个方法

我遵循了以前做过的一个模板,但是我感到很困惑,这就是我到目前为止的狗类:

代码语言:javascript
复制
public class Dog
{
    //Instance vars
    private String name;
    private int age;
    private double weight;

    //constructor
    public Dog(String initName)
    {
        name = initName;
        age = 0;
        weight = 0;
    }

    //methods
    public String getName()
    {
        return name;
    }

    public void setName()
    {
        return name;
    }

    public int getAge()
    {
        return age;
    }

    public int getDogYears()
    {
        return age*5;
    }

    public void addAYear()
    {
        age = age + 1;
    }

    public void setAge()
    {
        return age;
    }

    public double getWeight()
    {
        return weight;
    }

    public void setWeight()
    {
        weight = weight;
    }

    public String getData()
    {
        String data = "";
        data = name;
        data = data + "\n\tAge: " + age;
        data = data + "\n\tWeight: " + weight;


        return data;
    }
}

测试人员:

代码语言:javascript
复制
import java.util.Scanner;

public class DogTester
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner( System.in );

        //Create two dogs to keep track of
        Dog s1 = new Dog("Balto");

        //get the dogs age
        System.out.print("Enter the dog's age: "); //prompt
        double grade = in.nextDouble();             //read
        s1.addAge( years );                     //store

        //get the dogs weight
        System.out.print("Enter the dog's weight: "); //prompt
        s1.addWeight( in.nextDouble() );                //read AND store

        //output their data
        System.out.println( s1.getData() );

    }
}

我感到困惑,因为它希望从公共的空构造函数中得到什么,以及如何为这些构造函数设置一个测试器。

EN

回答 2

Stack Overflow用户

发布于 2013-11-18 17:29:55

构造函数不是“空”,也不是真正的“返回”任何东西。当你这样做时:

代码语言:javascript
复制
new Dog("Balto");

这将为Dog对象分配空间,并调用构造函数对其进行初始化。

要测试构造函数,您真正需要做的就是测试,以确保构造函数按其应有的方式运行。为构造函数需要保留一个Dog的状态定义一些明确的规则(这些规则通常称为“后置条件”)。在您的例子中,看一下代码,似乎对于一个新的Dog

  • 必须将名称设置为传递给构造函数的参数。
  • 将年龄和体重初始化为0。

因此,您所需要做的就是,在构建了一个新的Dog之后,验证这些条件是否为真。得到狗的名字,看看它是否是期望值。得到年龄和体重,确保它们为零。如果是这样的话,那么您的构造函数将坚持您定义的“契约”,您的测试就通过了。

票数 3
EN

Stack Overflow用户

发布于 2013-11-18 17:34:36

您的公开声明只说明可以从类外部访问这些方法。另一方面,如果你不想让任何人改变狗的重量后,最初建立了狗,你会把它设置为私人。

这里只有一个构造函数,其他语句是用来更改实例变量的方法:

代码语言:javascript
复制
public Dog(String initName)
{
    name = initName;
    age = 0;
    weight = 0;
}

要进行测试,您需要创建一个狗,然后对它运行一些assert语句,以验证您的方法是否正在执行您希望它们做的事情:

代码语言:javascript
复制
Dog d = new Dog("Pooch");
assertEquals("The name is incorrect", "Pooch", d.getName());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20053874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档