mockito JUnit initialize @测试目标bean的自动连线依赖关系bean

yc0p9oo0  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(139)

我有下一个DAO:

public class MyDaoImpl extends IMyDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    // Common DAO methods        

}

所以我想创建一个@Test,在这里我可以调用real方法

@ExtendWith(MockitoExtension.class)
class MyDaoImplTest {

    private IMyDao iMyDao;

    @BeforeEach
    void setUp() {
        iMyDao = mock(IMyDao.class);
    }

    @Test
    void testRealInvokation() {
        when(iMyDao.someDaoBehaviour())
            .thenCallRealMethod();

}

显然,call real方法持有NPE,因为JdcbTemplate依赖关系不存在(或者没有连接)。
那么,一般来说,在要测试的类上启用@Autowired依赖关系的正确过程是什么?
PD:这个想法是为了避免为这样做创建一个构造函数。这很好,但这不是这个想法。只是如何“启用”@Autowired的。

  • 谢谢-谢谢
fcg9iug3

fcg9iug31#

你应该总是模拟一个类的依赖关系来编写测试用例,你应该模拟JdbcTemplate并返回模拟数据

@ExtendWith(MockitoExtension.class)
 class MyDaoImplTest {

     private JdbcTemplate jdbcTemplate;

     @BeforeEach
     void setUp() {
         jdbcTemplate = mock(JdbcTemplate.class);
     }

     @Test
     void testRealInvokation() {
        result = iMyDao.someDaoBehaviour()

       // now mock the JdbcTemplate method, for example below
       Mockito.when(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM EMPLOYEE", Integer.class))
      .thenReturn(4);
    }

 }

相关问题