这是该类的方法,为此,我想使用Mockito编写单元测试用例
@Repository
public class EmployeeDaoImpl implements EmployeeDao {
@Autowired
DataSource dataSource;
// private static Logger log = Logger.getLogger(UserDaoImpl.class);
public void insertData(Employee emp) {
String sql = "INSERT INTO Emp"
+ "(first_name,last_name, gender, city) VALUES (?, ?, ?,?)";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.update(
sql,
new Object[] { emp.getFirstName(), emp.getLastName(),
emp.getGender(), emp.getCity() });
}
|
下面我写了我的测试用例方法:
@Test
public void insertDataTest() {
Employee emp= new Employee();
emp.setUserId(1);
emp.setFirstName("Somya");
emp.setLastName("Kumari");
emp.setGender("female");
emp.setCity("Bangalore");
jdbcTemplate = new JdbcTemplate(dataSource);
int var = 0;
Mockito.when(jdbcTemplate.update(Mockito.anyString(),
Mockito.anyVararg())).thenReturn(var);
empDao.insertData(emp);
withSuccess();
}
这是我遇到的错误,请帮助我。
答案 0 :(得分:0)
您需要在测试类中提供jdbcTemplate的@Mock
:
@Mock private JdbcTemplate template;
由于没有得到NPE
,而是得到InvalidUseOfMatchersException:
,因此,这仅意味着您使用@Autowired或new运算符将实例注入了测试类。
答案 1 :(得分:0)
您必须在when
调用中强制转换参数。否则,参数将变得模棱两可,并且编译器无法将其解析为特定的update
方法。
所以:
Mockito.when(jdbcTemplate.update((String)Mockito.anyString(), (Object[])Mockito.anyVararg())).thenReturn(var);
应该解决您的问题。至少对我有用。