当前位置: 首页 > 知识库问答 >
问题:

Junit for SimpleJdbcCall,JdbcTemplate自动连接

陆安国
2023-03-14

如何测试使用JdbcTemplate和SimpleJDBCall的repository类,如下所示

这就是我尝试过的

下面是测试代码和存储库代码,我使用的是Spring Boot最新版本junit5和mockito。我已经尝试了下面的解决方案,但可以让它工作

带Spring JdbcTemplate的SimpleJDBCall的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");
      }
}

共有1个答案

单于煌
2023-03-14

似乎您在这里混合了JUnit 4和JUnit Jupiter(JUnit 5的一部分)。

  • @RunBy是JUnit 4(JUnit Jupiter的等价值是@ExtenBy(MockitoExtension.class)
  • @Beforeeach是JUnit木星

此外,当您想要模拟SimpleJDBCall时,不要手动初始化它。当为数据存储库编写单元测试并让Mockito为您创建被测试的类时,@PostConstruct不会被调用,因此可以模拟所有协作者。

以下设置将模拟您的,您可以使用Mockito的when()。然后返回()定义模拟的行为:

@ExendWith(MockitoExtension.class)
public class DataRepositoryTest {

    @InjectMocks
    private DataRepository dataRepository 
    
    @Mock
    private JdbcTemplate oracleJDBCTemplate;
    
    @Mock
    private SimpleJdbcCall simpleJdbcCall;

    @Test
    void test() {

    }
}
 类似资料:
  • 我正在使用Springboot创建一个REST应用程序。在做了一些研究之后,我添加了JdbcTemplate,而不是直接使用Jdbc和resultsets。我在< code > application . properties 中有以下配置。 我的REST控制器有以下代码 在这个物体中,我有 我浏览了这个链接并配置了上面提到的所有内容。我可以看到)正在工作。但在下一行,我得到了一个。因此,Jdbc

  • USB自动连接 使用USB连接线连接外接装置与已开启电源的PSP™后,PSP™会自动更换为USB模式。 关 不自动更换为USB模式。 开 自动更换为USB模式。 提示 正使用游戏等部份机能时,即使连接USB连接线,亦不会自动更换为USB模式。

  • 我是Spring的新手。我正面临Spring-Boot的问题。我正在尝试将外部配置文件中的字段自动装配到自动装配的bean中。我有以下类 应用程序。Java语言 AppConfig。Java语言 服务接口 服务1 我无法在App类的postconstruct方法中显示服务名称变量。我这样做对吗?

  • 我正在努力学习一本书名为《SpringMVC初学者指南》的书,我一直在努力创建存储库对象。我不断地得到一个BeanCreationException。不知道我还错过了什么。我想知道是否有人能帮我解决这个问题。 请在下面找到我的代码。谢谢 BeanCreationException XML文件: ProductCrontroller: 产品存储库: InMemoryProductRepository

  • 问题内容: 我在hibernate状态下使用jpa。我有以下方法: 可以,但是它关闭了与数据库的连接。当秒被执行时 引发什么原因 我的配置: 编辑 我不知道为什么“ firstJDBCTemplateQuery”关闭数据库连接。如何解决这个问题? 堆栈跟踪: 编辑 我检查了堆栈跟踪。 编辑 我用 是 是 编辑调试结果 : 启动Beginin交易: /////////////////////////

  • 问题内容: 可以与列表一起使用吗? 就像我有带有mimetypes的属性文件,而在我的班级文件中,我有类似的东西 问题答案: Spring 4支持自动收集给定类型的所有bean并将其注入到集合或数组中的能力。 例: