一:创建一个测试类,建议将测试类单独放在一个包中(在 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