Jmockit无法返回状态为的新实例



以下是要测试的矿井服务方法

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。它应该返回"Address1",正如我在第1行预期的那样。为什么返回为null?

您的嘲笑是错误的。

您正在创建的mock与您正在嘲笑的"真实"类没有任何关系。

换句话说:你真正的班级有一个"地址"。它还记得,当首先设置地址值时,获取的地址将返回之前设置的值。

mock只是一种"看起来"像测试中的类的东西。它没有状态。它不理解你的二传手和接球手是如何联系在一起的。

换句话说:当你放下这些期望时,你描述的是mock在调用方法时的行为

employee.setAddress("Address1"); //line 1

employee.getAddress(); result = "Address1";

(但我认为以上可能还不够——你真的应该退一步,自己清楚地想清楚这里需要嘲笑哪些对象,以及每个对象需要哪些行为规范)

或者换言之:在应用它们之前,先研究一下您正在使用的概念。比如:开始阅读jmockit文档并遵循那里的示例,而不是发明自己的想法,这些想法与应该如何使用嘲讽框架无关。

最新更新