首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JUnit :继承& @15db9742?

JUnit :继承& @15db9742?
EN

Stack Overflow用户
提问于 2015-02-25 04:58:54
回答 2查看 1.8K关注 0票数 0

这是一个简单的Java应用程序,它通过汇总部门所有员工的月工资来计算部门的每月支出。部门的工作人员按层次结构排列:(测试人员支付了500.0__,&,开发人员支付了1000.0__,在经理支付了300.0__,在经理支付了300.0__)。

  • managerA <- managerB <- tester1 & dev1

这样,ManagerA的总费用应该是2100.0。这个总费用是部门每月的开支。

我打算构建一个应用程序来实现这一点&然后通过测试getTotalExpenses(),的返回(应该是2100.0 )来证明这一点。

我构建了测试,测试失败(图片):

  • java.lang.AssertionError: expected:<2100.0>但was:<300.0>

因此,我使用大量的println()构建了一个main(),以查看发生了什么&得到了一些非常意外的输出(图片):

代码语言:javascript
运行
复制
monDepExpensesApp.QATester@15db9742
monDepExpensesApp.Developer@6d06d69c
monDepExpensesApp.Manager@7852e922
monDepExpensesApp.Manager@7852e922
monDepExpensesApp.Manager@4e25154f
monDepExpensesApp.Manager@4e25154f

所有文档中的源代码都在下面,它解释了很多。

但以下是我的问题:

  • 为什么我的测试没通过?我是没有正确的测试,还是我的应用程序有缺陷?
  • 为什么我的main()显示上面的输出?是像指针、无符号数据、字节之类的吗?我需要包装,更改数据类型吗?

我从来没有见过这样的Java。

注意:我构建主程序只是为了告诉我为什么我的测试失败了。注:第二个问题已获答覆。

谢谢你看一看,我很有兴趣看看你有什么发现。

雇员

代码语言:javascript
运行
复制
package monDepExpensesApp;

/**
 * Employee declares expenses, & getExpenses().
 * 
 * Employee is the superclass of Manager, QATester, and Developer.
 * 
 * @author Reed
 */
public class Employee {
    protected double expenses;

    /**
     * getExpenses() returns the monthly allocation amount of a Manager, Developer, or QATester object.
     * @return a double values representing what the specified Employee is paid each month.
     */
    public double getExpenses() {
        return expenses;
    }
}

Developer

代码语言:javascript
运行
复制
package monDepExpensesApp;

/**
 * Developers warrant a monthly allocation of $1000.00, per Developer.
 * 
 * Developer extends Employee.
 * 
 * @author Reed
 */
public class Developer extends Employee {

    /**
     * Developer() creates a Developer, who is paid $1000.0 a month.
     */
    public Developer() {
        expenses = 1000.0;
    }
}

QATester

代码语言:javascript
运行
复制
package monDepExpensesApp;

/**
 * QA Testers warrant a monthly allocation of $500.00, per QA Tester.
 * 
 * QATester extends Employee.
 * 
 * @author Reed
 */
public class QATester extends Employee {

    /**
     * QATester() creates a QA Tester, who is paid $500.0 a month.
     */
    public QATester() {
        expenses = 500.0;
    }
}

管理器

代码语言:javascript
运行
复制
package monDepExpensesApp;

import java.util.ArrayList;

/**
 * Managers warrant a monthly allocation of $300.00, per Manager.
 * 
 * A manager is at the top of a hierarchical relationship,
 * in which one manager oversees employees such as developers,
 * QA testers, & other managers. A hierarchy is constituted of all the 
 * employees of a department. An employee's title is associated with
 * an amount paid monthly. A departments monthly expenses can be determined 
 * by adding the amounts paid to the employees in a hierarchy.
 * 
 * Manager extends Employee.
 * 
 * @author Reed
 */
public class Manager extends Employee {
    private ArrayList<Employee> employeeList = new ArrayList<>();

    /**
     * Manager() creates a Manager, who is paid $300.0 a month.
     */
    public Manager() {
        expenses = 300.0;
    }

    /**
     * Add() adds employees to a list.
     * @param employee
     */
    public void add(Employee employee) {
        employeeList.add(employee);
    }

    /**
     * getTotalExpenses() adds the values in employeeList,
     * calculating a departments total monthly expenses.
     * @return the value of totalExpenses.
     */
    public double getTotalExpenses() {
        double totalExpenses = 0.00;

        for(Employee employee : employeeList) {
            totalExpenses += employee.getExpenses();
        }
        return totalExpenses;
    }
}

DepOneExpTest

代码语言:javascript
运行
复制
package monDepExpensesApp.UnitTest;

import static org.junit.Assert.*;
import monDepExpensesApp.Developer;
import monDepExpensesApp.Manager;
import monDepExpensesApp.QATester;
import org.junit.Test;

/**
 * DepOneExpTest evaluates a departments actual total expenses,
 * by comparing them to a projected total.
 * 
 * @author Reed
 */
public class DepOneExpTest {

    /**
     * testOne() compares a departments actual total expenses with a projected total of $2100.00.
     * This departments employees create the following hierarchy:
     * managerA <-- managerB <-- tester1 &  dev1.
     */
    @Test
    public void test() {
        QATester tester1 = new QATester(); 
        Developer dev1 = new Developer(); 

        Manager managerB = new Manager(); 
        managerB.add(tester1);
        managerB.add(dev1);

        Manager managerA = new Manager();
        managerA.add(managerB);

        assertEquals(2100.0, managerA.getTotalExpenses(), 0.001);
    }

}

Main2

代码语言:javascript
运行
复制
package monDepExpensesApp;

public class Main2 {

    public static void main(String[] args) {
        QATester tester1 = new QATester();
        System.out.println(tester1);

        Developer dev1 = new Developer(); 
        System.out.println(dev1);

        Manager managerB = new Manager();
        System.out.println(managerB);

        managerB.add(tester1);
        managerB.add(dev1);
        System.out.println(managerB);

        Manager managerA = new Manager();
        System.out.println(managerA);

        managerA.add(managerB);
        System.out.println(managerA);
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-25 07:20:59

当您打印一个对象时,它只是打印调用toString()的结果。默认的toString()实现将返回一个包含类名和哈希代码表示的字符串(参见toString() Javadoc )。正如其他人所指出的,您可以通过重写toString()来改进事情。

代码语言:javascript
运行
复制
@Override
public String toString() {
  return expenses + " " + employeeList;
}

你的问题是:

代码语言:javascript
运行
复制
totalExpenses += employee.getExpenses();

这会增加子女的开支,但不会增加孙辈的开支。你想:

代码语言:javascript
运行
复制
totalExpenses += employee.getTotalExpenses();

您还可能希望getTotalExpenses()依赖于expenses字段。

票数 0
EN

Stack Overflow用户

发布于 2015-02-25 05:10:20

只需将以下内容添加到Employee类中,就可以解决问题

代码语言:javascript
运行
复制
@Override
public String toString() {
   //return something sensible like the Employee Name
    return getEmployeeName();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28711455

复制
相关文章

相似问题

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