模拟JdbcTemplate进行单元测试

时间:2018-08-19 10:39:23

标签: junit mockito autowired jdbctemplate

我在mockito中很陌生。

这是我的原始班级:

@Component
public class QueryForASingleValue<T> implements IExecutor<T> {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    @Override
    public Boolean execute(String sql, T expectedValue) {
        T result = getJdbcTemplate().queryForObject(
                sql,  (Class<T>)expectedValue.getClass());
        return expectedValue.equals(result);
    }
}

您可能会注意到set/get函数,它仅用于Junits。

这是我的考试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
@ActiveProfiles("test")
public class QueryForASingleValueTest {
    @Mock
    private JdbcTemplate mockJdbcTemplate;

    @Autowired
    private QueryForASingleValue queryForASingleValue;

    @Before
    public void initTests() {
        queryForASingleValue.setJdbcTemplate(mockJdbcTemplate);
    }

    @Test
    public void testShouldReturnTrueIfExpectedValueMatches() {
        when(mockJdbcTemplate.queryForObject(anyString(), eq(String.class))).thenReturn("One");
        Boolean retVal = queryForASingleValue.execute("TestSql", "One");
        assertTrue(retVal);
    }
}

我想知道是否可以从原始班级中删除get/set?可以增强吗?谢谢!

0 个答案:

没有答案