这是我要测试的矿山服务方法
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeDao employeeDao;
@Override
public Employee addEmployee(String address) {
Employee employee = new Employee();
employee.setAddress(address);
return employeeDao.create(employee);
}
}
这是我的测试类
@RunWith(JMockit.class)
public class EmployeeServiceImplTest {
@Tested
private EmployeeServiceImpl employeeServiceImpl;
@Injectable
private EmployeeDaoImpl employeeDao;
@Test
public void testAddEmployee() {
new Expectations() {{
Employee employee = new Employee();
employee.setAddress("Address1"); //line 1
employeeDao.create(withInstanceOf(employeeDao.class));
result = employee;
}};
Employee employee=employeeServiceImpl.addEmployee("Address1");
assertEquals("Address1", employee.getAddress()); // Line 2
}
}
但是当我在第2行执行employee.getAddress()时,它返回null。它应该返回"地址1"因为我在第1行的期望中设置了它。为什么它返回为null?
答案 0 :(得分:0)
你正在嘲笑错误。
您正在创建的模拟无与您正在嘲笑的“真实”类有关。
换句话说:你真正的班级有一个“地址”。并且它记得当你首先设置地址值时,获取地址将返回你之前设置的值。
模拟只是“看起来”像你正在测试的类。它没有国家。它不了解你的二传手和吸气者是如何相关的。
换句话说:当你放下这些期望时,你正在描述模拟在调用方法时表现的方式。因此改变:
employee.setAddress("Address1"); //line 1
到
employee.getAddress(); result = "Address1";
(但我认为上面的内容可能还不够 - 你真的应该退后一步,清楚地了解你自己这里需要嘲笑哪些对象,以及哪些行为规范你需要每个人)
或者换句话说:研究概念您正在使用之前应用它们。喜欢:开始阅读jmockit文档并按照那里的示例进行操作 - 而不是发明自己的想法,没有与应该如何使用嘲弄框架。