首页 > 解决方案 > 如何在方法中传递和模拟对象的 var args

问题描述

这是类的方法,为此,我想用 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();

}

这是我得到的错误,请帮助我。

错误控制台

标签: javamockitojunit4

解决方案


你必须在你的when调用中转换参数。否则参数将不明确,编译器无法将其解析为特定update方法。

所以:

Mockito.when(jdbcTemplate.update((String)Mockito.anyString(), (Object[])Mockito.anyVararg())).thenReturn(var);

应该可以解决您的问题。至少它对我有用。


推荐阅读