发表于: 2017-08-20 19:19:19
1 951
今天完成的事情:
1、把test程序放到maven生成的src\test\java目录下的同名包内。
2、借助测试修改了原来的selectById代码使代码更健壮。
3、修改测试代码,增加println使测试结果更直观。
修改后的StudentDAOImplTest.java:
4、测试结果:
明天计划的事情:查看日志,并转成Debug模式,练习调试,学会查看单步执行时的变量值。
遇到的问题:
1、测试delete()方法时,参数给的是一个不存在的主键值,数据库报错导致测试报错.
解决方法:修改被测方法-捕获异常并处理。(也可以不用queryForObject,改用query)
解决过程:
查看调试信息时,发现是在DataAccessUtils的requiredSingleResult()方法中抛出的异常,
双击定位到源码:
可以看出,当results为空时,就会抛出EmptyResultDataAccessException异常,Spring这样做的目的是为了防止程序员不对空值进行判断,保证了程序的健壮性。另外,当results的size大于1时,还会抛出IncorrectResultSizeDataAccessException异常,以保证返回的记录只有一条。
收获:
1、Junit提供了一个Assert类,类中定义了很多静态方法来进行断言。常用列表如下:
• assertTrue(String message, boolean condition) 要求condition == true
• assertFalse(String message, boolean condition) 要求condition == false
• fail(String message) 必然失败,同样要求代码不可达
• assertEquals(String message, XXX expected,XXX actual) 要求expected.equals(actual)
2、hamcrest包提供了assertThat方法,更易于理解。junit4.4版本以后包含了hamcret:
例: //str的值为“tgb”,则测试通过
assertThat( str, is( "tgb" ) );
3、JUnit3中,测试用例需要继承TestCase类。与JUnit3不同,JUnit4通过注解的方式来识别测试方法:
• @BeforeClass 全局只会执行一次,而且是第一个运行
• @Before 在测试方法运行之前运行
• @Test 测试方法
• @After 在测试方法运行之后允许
• @AfterClass 全局只会执行一次,而且是最后一个运行
• @Ignore 忽略此方法
执行次序是@BeforeClass -> @Before -> @Test -> @After -> @Before -> @Test -> @After -> @AfterClass。@Ignore会被忽略。
4、如果期望此被测的方法抛出NullPointerException异常,则:
@Test(expected = NullPointerException.class)
评论