一:創建一個測試類,建議將測試類單獨放在一個包中(在 maven 項目里有測試類專門的存放位置),新建一個Junit Test Case類,下一步?
測試類的命名建議是你將要測試的類名+Test,然后點 Browse, 你可以選擇要進行測試的類(一般選擇 Service, 因為 Service 關心的是業務需求),用這種方式創建可以自動生成要測試類的測試類,你只需要進行測試代碼的書寫.
@Testpublic void testqueryById(){} ? ?@Testpublic void testQueryAll(){} ? ?@Testpublic void testReduceNumber(){}123456789101112
如果里面有自動生成的代碼,刪除或注釋即可…
二:配置 spring 和 junit 整合, junit 啟動時加載 springIOC 容器,這里你需要 Spring-test jar包
@RunWith(SpringJUnit4ClassRunner.class) ? ?//告訴junitspring配置文件@ContextConfiguration(locations = {"classpath:spring/spring-dao.xml"})123
同樣的,在測試類中我們會調用 Service 的邏輯,由于我們使用的是 Spring+SpringMVC+ 持久化框架,所以要注入一個 IService 接口(這里我直接對 DAO 進行測試了)
@Autowiredprivate SeckillDao seckillDao;12
接下來是測試邏輯,在編寫測試代碼之前建議覆蓋實體中的 toString 方法,不然打印會很麻煩.
@Test ? ?public void testqueryById(){ ? ? ? ?long id = 1000;Seckill seckill = seckillDao.queryById(id);System.out.println(seckill.getSeckillName());System.out.println(seckill);} ? ?//JAVA沒有保存形參的記錄,如果你在 dao 中傳了多個參數,那么需要聲明它的形參對應的實參,否則 JVM 會顯示找不到參數.聲明方式稍后奉上@Test ? ?public void testQueryAll(){List seckills = seckillDao.queryAll(0, 100); ? ? ? ?for(Seckill seckill:seckills){System.out.println(seckill);}}@Test ? ?public void testReduceNumber(){Date killTime = new Date(); ? ? ? ?//對增加進行測試的時候,只要數據庫增加了一條數據,我們就默認這個方法執行成功了int updateCount = seckillDao.reduceNumber(1000L, killTime);System.out.println("updateCount = "+updateCount);}123456789101112131415161718192021222324
解決JAVA不保存形參的記錄
int reduceNumber(@Param("seckillId")long seckillId,@Param("killTime")Date killTime);Seckill queryById(long seckillId); ? ?/*** mysql的分頁查詢* @param offset 告訴它實際的形參* @param limit* @return*/List queryAll(@Param("offset")int offset,@Param("limit")int limit);1234567891011