老师在视频中给出的解释是因为UserManager中的代码还没有执行完,就开始执行给User对象赋值,所以会报空指针。解决方法是等待几秒钟再执行User那句。我在自己本地运行却不行,无论等待多少秒也都会报空指针。经过多次试验发现:
第一次执行时会报空指针,然后不需要修改任何代码,再运行一次就能顺利通过。以updateUserInfo为例:user 表中原有n条用户记录,updateUserInfoCase表中有一条新用户记录,该记录在user表中不存在。UpdateUserInfoTest这条用例的功能是从updateUserInfoCase表中取出数据,用以更新到user表中id相同的那一条。第一次执行时,getResult方法让user表成功被更新了。但 User user = session.selectOne这条语句执行后报了空指针。无论前面加多少秒也没用。
然后什么都不修改,直接执行第二遍,这次就一定会通过。而第二次执行时,user表里已经有和updateUserInfoCase表中一模一样的数据了(因为第一次执行时已经把user表更新过了)。但如果第二次执行前把user表改回未更新之前的数据,那么还是会报空指针错。
代码是跟着老师的视频同步敲的,之后也同下载的课堂代码对照过,应该没有错。但是不知道为什么会这样。因为如果执行两遍才通过的话,那这种更新功能也就没意义了。addUser用例也是同样的情况。
麻烦老师给分析一下,谢谢!