Java 从JUnit测试用例调用方法失败

Java 从JUnit测试用例调用方法失败,java,junit,Java,Junit,我有一个问题: 我在JUnit测试用例中有这样一个方法: @Test public void test1st_scenario() { out = Mockito.mock(PrintStream.class); System.setOut(out); restaurant = new Restaurant(); employee = new Employee(null, null, null); ArrayList<Employee> e

我有一个问题:

我在JUnit测试用例中有这样一个方法:

@Test
public void test1st_scenario() {

    out = Mockito.mock(PrintStream.class);
    System.setOut(out);
    restaurant = new Restaurant();
    employee = new Employee(null, null, null);

    ArrayList<Employee> employees = new ArrayList<Employee>();
    employees.add(new Employee("Luciano", "chef", ExperienceLevel.LOW));
    employees.add(new Employee("Naved", "waiter", ExperienceLevel.LOW));
    employees.add(new Employee("Fabrizio", "waiter", ExperienceLevel.LOW));
    employees.add(new Employee("Amnir", "waiter", ExperienceLevel.LOW));
    employees.add(new Employee("Abel", "barman", ExperienceLevel.LOW));

    restaurant.setBudget(10000);
    employee.increaseExperience(employees, 1, "Luciano");
    Mockito.verify(out).println("The chef experience level increased");
    Assert.assertEquals(8800, restaurant.getBudget());
}
@测试
公共void test1st_场景(){
out=Mockito.mock(PrintStream.class);
系统放样;
餐厅=新餐厅();
员工=新员工(空,空,空);
ArrayList employees=新的ArrayList();
添加(新员工(“卢西亚诺”,“厨师”,体验级别低));
添加(新员工(“导航”、“服务员”、体验级别低));
添加(新员工(“Fabrizio”,“服务员”,ExperienceLevel.LOW));
添加(新员工(“Amnir”、“服务员”、ExperienceLevel.LOW));
添加(新员工(“Abel”、“barman”、“ExperienceLevel.LOW”);
餐厅。setBudget(10000);
员工。增加经验(员工,1名,“Luciano”);
Mockito.verify(out).println(“厨师经验等级提高”);
Assert.assertEquals(8800,restaurant.getBudget());
}
Employee类中的increaseExperience方法为:

public void increaseExperience(ArrayList<Employee> employees,
        int numberOfEmployee, String employeeName) {
    restaurant = new Restaurant();
    String[] parts = employeeName.split(",");
    for (int i = 0; i < numberOfEmployee; i++) 
    {
        for (int a = 0; a < employees.size(); a++) 
        {
            if (employees.get(a).name.equals(parts[i])) 
            {
                if (employees.get(a).job.equals("chef") || employees.get(a).job.equals("barman")) 
                {
                    if (employees.get(a).experience.equals(ExperienceLevel.LOW) || employees.get(a).experience.equals(ExperienceLevel.MEDIUM)) 
                    {
                        if (restaurant.getBudget() >= 1200) 
                        {
                            restaurant.setBudget(restaurant.getBudget() - 1200);
                            if (i == 0)
                                System.out.println("The " + employees.get(a).job + " experience level is increased");
                            else
                                System.out.println(" and the " + employees.get(a).job + " experience level is increased");
                        } 
                        else 
                        {
                            if (i == 0)
                                System.out.println("The " + employees.get(a).job + " experience level is failed to increase");
                            else
                                System.out.println(" and the " + employees.get(a).job + " experience level is failed to increase");
                        }
                    } 
                    else if (employees.get(a).experience.equals(ExperienceLevel.HIGH)) 
                    {
                        if (i == 0)
                            System.out.println("The " + employees.get(a).job + " experience level is increased");
                        else
                            System.out.println(" and the " + employees.get(a).job + " experience level is increased");
                    }
                } 
                else if (employees.get(a).job.equals("waiter")) 
                {
                    if (employees.get(a).experience.equals(ExperienceLevel.LOW) || employees.get(a).experience.equals(ExperienceLevel.MEDIUM)) 
                    {
                        if (restaurant.getBudget() >= 800) 
                        {
                            restaurant.setBudget(restaurant.getBudget() - 800);
                            if (i == 0)
                                System.out.println("The " + employees.get(a).job + " experience level is increased");
                            else
                                System.out.println(" and the " + employees.get(a).job + " experience level is increased");
                        } 
                        else 
                        {
                            if (i == 0)
                                System.out.println("The " + employees.get(a).job + " experience level is failed to increase");
                            else
                                System.out.println(" and the " + employees.get(a).job + " experience level is failed to increase");
                        }
                    } 
                    else if (employees.get(a).experience.equals(ExperienceLevel.HIGH)) 
                    {
                        if (i == 0)
                            System.out.println("The " + employees.get(a).job + " experience level is increased");
                        else
                            System.out.println(" and the " + employees.get(a).job + " experience level is increased");
                    }
                }
            }
        }
    }
}
public void increaseExperience(ArrayList员工、,
int numberOfEmployee,字符串employeeName){
餐厅=新餐厅();
String[]parts=employeeName.split(“,”);
for(int i=0;i=1200)
{
restaurant.setBudget(restaurant.getBudget()-1200);
如果(i==0)
System.out.println(“增加了“+employees.get(a).job+”经验级别”);
其他的
System.out.println(“并且“+employees.get(a.job+”的经验级别增加”);
} 
其他的
{
如果(i==0)
System.out.println(“员工+employees.get(a.job+”经验等级提升失败”);
其他的
System.out.println(“且“+employees.get(a.job+”经验等级未能提高”);
}
} 
else if(employees.get(a).experience.equals(ExperienceLevel.HIGH))
{
如果(i==0)
System.out.println(“增加了“+employees.get(a).job+”经验级别”);
其他的
System.out.println(“并且“+employees.get(a.job+”的经验级别增加”);
}
} 
else if(employees.get(a.job.equals)(“服务员”))
{
if(employees.get(a).experience.equals(ExperienceLevel.LOW)| employees.get(a).experience.equals(ExperienceLevel.MEDIUM))
{
if(restaurant.getBudget()>=800)
{
restaurant.setBudget(restaurant.getBudget()-800);
如果(i==0)
System.out.println(“增加了“+employees.get(a).job+”经验级别”);
其他的
System.out.println(“并且“+employees.get(a.job+”的经验级别增加”);
} 
其他的
{
如果(i==0)
System.out.println(“员工+employees.get(a.job+”经验等级提升失败”);
其他的
System.out.println(“且“+employees.get(a.job+”经验等级未能提高”);
}
} 
else if(employees.get(a).experience.equals(ExperienceLevel.HIGH))
{
如果(i==0)
System.out.println(“增加了“+employees.get(a).job+”经验级别”);
其他的
System.out.println(“并且“+employees.get(a.job+”的经验级别增加”);
}
}
}
}
}
}
但是,当我在JUnit测试方法中将预算设置为10000时,我不能将其设置为8800。但我还是得到了10000英镑。调用increaseExperience方法可能失败

我怎样才能解决它


谢谢

这就是问题所在,就在您的
increaseExperience
方法的开头:

restaurant = new Restaurant();
您在方法中使用的餐厅与测试中使用的餐厅完全不同

也许你应该把餐厅作为另一个参数来传递?或者员工应该知道他们工作的餐厅


(也不清楚为什么你在没有有用信息的情况下调用
员工的
increaseExperience
——听起来要么它应该是
员工
上的一个实例方法,要么它应该是
餐厅
上的一个实例方法,此时你应该删除它。)
restarant
变量,或者它应该是
Employee
上的一个静态方法,因为它作用于许多员工,而不仅仅是一名员工……从根本上说,我认为您需要重新审视您的设计。)

似乎更可能是您调用的代码中的一个错误。我建议您停止模仿