簡體   English   中英

Spring JDBC的集成測試

[英]Integration test for spring jdbc

假設我們有一個服務層:

@Service
public class MyServiceImpl implements MyService {

    @Autowired
    private MyDAO myDAO;

    @Transactional
    public void myMethod(SomeObject someObject) {
       myDAO.insertIntoMyDb(someObject);

    }
}

假設myDAO使用spring jdbc:

@Repository
public class MyDAOImpl implements MyDAO {

    @Autowired
    private NamedParameterJdbcTemplate jdbcTemplate;

    @Override
    public void insertIntoMyDb(SomeObject object) {

        // some code before this where we get query and param

        int numberOfRowsUpdated = jdbcTemplate.update(query,param);

        if(numberOfRowsUpdated != 1)
            throw new Exception("Error while inserting a record in database. Actual records inserted : " + numberOfRowsUpdated);
    }


}

我想寫2個測試。

第一個測試將僅檢查我的dao層。 我想在這里進行jdbc調用,獲取數據並驗證。 我不想嘲笑他們。

第二項測試是集成測試。 我希望我的服務層可以調用Dao層。 請注意,有交易。 現在,這將為我提供來自DAO的數據。 DAO再次必須連接到db以獲取數據。

我正在使用彈簧靴。 我的數據庫屬性存在於applicationITest.properties文件中。

這兩個測試該怎么做? 我必須使用什么正確的注釋? 有人可以舉個例子嗎?

a)默認情況下,只要您使用@Transactional注釋Test類,就會發生回滾。 有關測試管理的交易的文檔。

樣本測試班:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = MyTestConfig.class)
@Transactional
public class MyClassTest {
   //..

   @Test
   public void myTest() {
      //..
   }

   //..
}

b)是的,您可以使用@Commit (在Spring 4.2中添加)測試注釋來強制提交。 這是文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM