【发布时间】:2018-05-16 14:24:01
【问题描述】:
我正在使用 JUnit 和 Mockito 库来测试我的应用程序。问题是,当我在代码下方执行时,该值在运行时未返回空列表,并且测试失败。理想情况下,当getEmployee() 被执行时,它应该返回空列表
public class Check_Test extends TestCase
{
public void testMyCheck()
{
Check checkObj = new Check();
EmployeeFactory employeeFactoryMock = Mockito.mock(EmployeeFactory.class);
Mockito.doReturn(Collections.EMPTY_LIST).when(employeeFactoryMock).getEmployee();
String str = checkObj.myCheck();
assertEquals("", str);
}
}
我尽我所知尝试了所有可能性,但我无法通过这个测试用例。
下面的Check 类具有myCheck() 方法,我需要测试是否为空...
public class Check
{
public String myCheck()
{
List<Employee> employee = EmployeeFactory.getInstance().getEmployee();
if (employee.isEmpty())
{
return ""; //Line No. 8 returning empty but, control is not coming here
}
else
{
return "NotEmpty"; // The control is always coming here ????
}
}
}
我热切期待支持。任何人都可以帮助我,如何通过这个测试用例???。如何通过 Mockito 使第 8 行的控件通过测试用例???
请假设,下面两个类没有真正的代码,我们只有二进制文件作为 JAR 文件,我们不能修改下面的代码......我附上这个以便我们理解......
public class EmployeeFactory
{
private EmployeeFactory()
{
}
public static EmployeeFactory getInstance()
{
return EmployeeFactoryHelper.INSTANCE;
}
private static class EmployeeFactoryHelper
{
public static final EmployeeFactory INSTANCE = new EmployeeFactory();
}
private static List<Employee> employees = null;
static
{
employees = Arrays.asList(
new Employee("Manish", "Kumar", true, 60),
new Employee("Siva", "Attla", true, 42),
new Employee("Anand", "Manivel", false, 51),
new Employee("Madhavi", "Govind", true, 45),
new Employee("Janani", "Chidambaram", true, 45),
new Employee("Mannu", "Krishna", false, 39),
new Employee("Karthika", "Hosamane", false, 39)
);
}
public List<Employee> getEmployee()
{
return employees;
}
}
public class Employee
{
private String firstName;
private String lastName;
private boolean workStatus;
private int age;
public Employee(String firstName, String lastName, boolean workStatus, int age)
{
super();
this.firstName = firstName;
this.lastName = lastName;
this.workStatus = workStatus;
this.age = age;
}
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
public boolean isWorkStatus()
{
return workStatus;
}
public void setWorkStatus(boolean workStatus)
{
this.workStatus = workStatus;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
@Override
public String toString()
{
return "Employee [firstName=" + firstName + ", lastName=" + lastName + ", workStatus=" + workStatus + ", age=" + age + "]";
}
}
【问题讨论】:
-
你能试试这个语法吗?
when(employeeFactoryMock.getEmployee()).thenReturn(Collections.<Employee>emptyList()); -
没错。不要使用 Collections.EMPTY_MAP,而是使用 emptyMap() 方法。对于较新的 Java,您也不需要
<Employee>部分。 -
@RonNabuurs :是的,我也试过了,还不行。
-
我用更多信息更新了我的答案。但请注意,您的代码还有很多事情......不好。您使用的某些名称毫无意义(例如 class Check 、 myCheck ... 不会告诉您有关检查的内容)甚至具有误导性(例如使用
employee表示单数来保存 list雇员)。拥有那个静态助手类也很奇怪,实际上:那里的整个工厂设计只是“错误”。 -
这不是原始代码,我创建了场景供开发人员理解,以便我尽快得到解决方案。你可以忽略这里的类和方法命名转换。