创建一个狗类和测试人员

时间:2013-11-18 17:23:44

标签: java class

您好我被要求创建以下内容:
创建一个跟踪狗的

的狗类
  1. 名称

  2. 年龄

  3. 重量
  4. 可以使用以下方法:

    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类来测试上面的每个方法

    我之前正在遵循这个模板,但我感到困惑,这是我到目前为止所做的 狗班:

    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;
        }
    }
    

    测试仪:

    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() );
    
        }
    }
    

    我很困惑,因为它需要公共空构造函数,以及如何为这些构建测试器

2 个答案:

答案 0 :(得分:3)

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

new Dog("Balto");

这为Dog对象分配空间并调用构造函数来初始化它。

要测试构造函数,您真正需要做的就是测试以确保构造函数的行为正常。为构造函数需要保留Dog的状态定义一些明确的规则(这些通常称为“后置条件”)。在您的情况下,查看代码,似乎对于新的Dog

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

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

答案 1 :(得分:1)

您的公开声明只是声明可以从课外访问这些方法。另一方面,如果您最初构建狗后不想让任何人改变狗的体重,您可以将其设置为私人。

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

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

要测试你需要创建一个狗,然后对它运行一些断言语句,以验证你的方法正在按照你的期望做到:

Dog d = new Dog("Pooch");
assertEquals("The name is incorrect", "Pooch", d.getName());