发表于: 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) 



返回列表 返回列表
评论

    分享到