junit for simplejdbccall with jdbctemplate autowired

fnatzsnv  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(287)

如何测试使用jdbctemplate和simplejdbccall的repository类,如下所示
这就是我尝试过的
下面是我正在使用的最新版本junit5和mockito的测试代码和存储库代码。我试过研究下面的解决方案,但能成功
simplejdbccall与SpringJDBCTemplate的mockito

@RunWith(MockitoJUnitRunner.class)
public class DataRepositoryTest {

    @InjectMocks
    private DataRepository dataRepository 

    @Mock
    private JdbcTemplate oracleJDBCTemplate;

     @Mock
     private SimpleJdbcCall simpleJdbcCall;

    @BeforeEach
    public void setup() {

        MockitoAnnotations.initMocks(this);

        simpleJdbcCall = new SimpleJdbcCall(oracleJDBCTemplate)
                .withProcedureName("PROC_NAME_P1")
                .withoutProcedureColumnMetaDataAccess()
                .declareParameters(

                                new SqlParameter("p_in_name", Types.VARCHAR),
                                new SqlParameter("p_age", Types.VARCHAR)

                                ).returningResultSet("ref_cur", new DataRowMapper());

        }

    @Test
    public void test()
    {

        System.out.println(" JdbcTemplate-- "  + oracleJDBCTemplate ); // prints is oracleJDBCTemplate;

        System.out.println(" simpleJdbcCall-- "  + simpleJdbcCall ); //print object hascode

    }

}

下面是存储库代码@repository public class datarepository{

@Autowired
    @Qualifier("OracleJDBCTemplate")
    private JdbcTemplate oracleJDBCTemplate;

    private SimpleJdbcCall simpleJdbcCall;

    @PostConstruct
    public void init()
    {
        simpleJdbcCall = new SimpleJdbcCall(oracleJDBCTemplate)
                .withProcedureName("PROC_NAME_P1")
                .withoutProcedureColumnMetaDataAccess()
                .declareParameters(

                                new SqlParameter("p_in_name", Types.VARCHAR),
                                new SqlParameter("p_age", Types.VARCHAR)

                                ).returningResultSet("ref_cur", new DataRowMapper());

    }

    @SuppressWarnings("unchecked")
    public List<Person>  getPerson(Data data) {

          Map<String, Object> result =
                  simpleJdbcCall.execute(date.getName,date.getAge);

          return (List<Person>) result.get("ref_cur");
      }
}
vxbzzdmp

vxbzzdmp1#

似乎你在这里混合了junit4和junitjupiter(junit5的一部分)。 @RunWith 是junit 4(相当于junit 4)
@ExtendWith(MockitoExtension.class) @BeforeEach 朱尼特是朱庇特吗
此外,不要手动初始化 simpleJdbcCall 当你想嘲笑它的时候。在为您的应用程序编写单元测试时 DataRepository 让mockito为你创建被测试的类, @PostConstruct 不会被调用,所以可以嘲笑所有的合作者。
下面的设置将模拟您的,您可以使用mockito的 when().thenReturn() 要定义模拟的行为:

@ExendWith(MockitoExtension.class)
public class DataRepositoryTest {

    @InjectMocks
    private DataRepository dataRepository 

    @Mock
    private JdbcTemplate oracleJDBCTemplate;

    @Mock
    private SimpleJdbcCall simpleJdbcCall;

    @Test
    void test() {

    }
}

相关问题