【发布时间】:2014-11-24 08:16:52
【问题描述】:
我有一个问题:
我的 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());
}
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");
}
}
}
}
}
}
但是当我在我的 JUnit 测试方法中将预算设置为 10000 时,我无法将其恢复为 8800。但是我还是得到10000。可能是调用increaseExperience方法失败。
我该如何解决?
谢谢。
【问题讨论】:
-
这似乎更有可能是您调用的代码中的错误。我建议你停止嘲笑
System.out- 然后你会得到你的调试日志......此外,你应该在调试器中单步调试代码。 -
我认为你应该得到 ArrayIndexOutOfBoundException?
-
但是乔恩,当我忽略嘲笑时,我仍然无法得到 8800。它并没有减少任何东西。
-
没有 Almas,当我使用 Mockito 时,参数是不同的。当我忽略嘲笑时,我没有得到 8800
-
@yeniden:“它不会减少任何东西”——它会为您提供调试信息!如果您随后在测试中将它们关闭,即使您不了解发生了什么,那么拥有所有这些
System.out.println行有什么意义?它本身并不能解决问题,但它可以帮助您找到问题。