日常啰嗦
前一篇文章《Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试》讲了不为和不能两个状态,针对不为,只能自己调整心态了,而对于不能,本文会结合一些实例进行讲解,应该可以使得你掌握单元测试的方法。篇幅所限,所以先写三个类型的测试实例,首先是自己平时写着玩儿的测试类,然后分别是针对数据层和业务层的测试,代码都已经上传到github上了。
我的github地址
我们可能常常会碰到这种事情,需要实现一个功能的时候,忽然想不起来该用什么方法了,或者忽然忘记一个方法该怎么用了,这个时候我可能会查一下API然后写一个简单的测试方法,并没有明确的要去测试什么功能,只是简单的验证一个函数的用法,或者自己实在不确定一个方法该怎么用了,用这种方式加深一下印象。
// 得到MD5加密的内容
@Test
public void md5Test() {
System.out.println(MD5Util.MD5Encode("ssm-maven-secret", "UTF-8"));
//83d8d99f45f62461cc7b7ee76b448cb0
}
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">// 通过substring()获取文件名</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">subStringTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//通过substring()获取文件名</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">String</span><span class="pln" style="color:rgb(0,0,0);"> url </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"https://s.doubanio.com/f/shire/5522dd1f5b742d1e1394a17f44d590646b63871d/pics/book-default-medium.gif"</span></span><span class="pun" style="color:rgb(102,102,0);">;</span><span class="pln" style="color:rgb(0,0,0);">
url </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> url</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">substring</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">url</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">lastIndexOf</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"/"</span></span><span class="pun" style="color:rgb(102,102,0);">)</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">+</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">1</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">System</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="kwd" style="color:rgb(0,0,136);">out</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">println</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">url</span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//book-default-medium.gif</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span></code><div class="hljs-button" data-title="复制"></div></pre>
这个只是自己的个人习惯,记忆力有时候真的差。
数据层单元测试针对书籍模块的测试类,讲解在代码中:
@RunWith(SpringJUnit4ClassRunner.class) //指定测试用例的运行器 这里是指定了Junit4
@ContextConfiguration("classpath:applicationContext.xml")//装配Spring
public class BookDaoTest {
//自动注入,需要将BookDao纳入到Spring容器的管理下,不然会报错
@Autowired
private BookDao bookDao;
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">getBookByIdTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Book</span><span class="pln" style="color:rgb(0,0,0);"> book1 </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> bookDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">getBookById</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"1"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertEquals</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">book1</span><span class="pun" style="color:rgb(102,102,0);">,</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">null</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//判断两个参数是否相同,返回true的话则测试通过,不然控制台会亮红灯。</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Book</span><span class="pln" style="color:rgb(0,0,0);"> book2 </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> bookDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">getBookById</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"1002"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertEquals</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">book2</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">getTitle</span><span class="pun" style="color:rgb(102,102,0);">(),</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"材料成型概论"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">// Assert.assertEquals(book2.getTitle(), "我随便写一个");</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//写了三个断言,可以分别进行测试,也可以根据上面三个断言自己编写测试。</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span><span class="pln" style="color:rgb(0,0,0);">
}
针对书籍模块的测试类,讲解也都在代码中:
@RunWith(SpringJUnit4ClassRunner.class) //指定测试用例的运行器 这里是指定了Junit4
@ContextConfiguration("classpath:applicationContext.xml")
(transactionManager = “transactionManager”, defaultRollback = true)
//默认回滚,即此类中的方法即使执行成功,数据也并不会真正的修改,方法执行后会回滚。
//因为对数据库的增删改都会回滚,因此便于测试用例的循环利用
//前面书籍模块的测试由于只有查询方法所以没有加这个注解。
//如果想看到数据库中的数据随着测试而发生变化可以去掉这个注解。
public class UserDaoTest {
//自动注入,需要将BookDao纳入到Spring容器的管理下
private UserDao userDao;
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">loginTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pln" style="color:rgb(0,0,0);"> user </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">new</span></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pun" style="color:rgb(102,102,0);">();</span><span class="pln" style="color:rgb(0,0,0);">
user</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setUserName</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"admin"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
user</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setPassword</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"123456"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//断言此姓名和密码的用户为空</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//密码并没有加密,所以登录失败,返回的用户对象为空。</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertEquals</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">login</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">user</span><span class="pun" style="color:rgb(102,102,0);">),</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">null</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pln" style="color:rgb(0,0,0);"> user2 </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">new</span></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pun" style="color:rgb(102,102,0);">();</span><span class="pln" style="color:rgb(0,0,0);">
user2</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setUserName</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"admin"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
user2</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setPassword</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">MD5Util</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">MD5Encode</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"123456"</span></span><span class="pun" style="color:rgb(102,102,0);">,</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"UTF-8"</span></span><span class="pun" style="color:rgb(102,102,0);">));</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//断言此姓名和密码的用户可以登录成功,且用户id为2</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">login</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">user2</span><span class="pun" style="color:rgb(102,102,0);">).</span><span class="pln" style="color:rgb(0,0,0);">getId</span><span class="pun" style="color:rgb(102,102,0);">()</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">==</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">2</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//执行下面这个断言则会报错。</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//Assert.assertTrue(userDao.login(user2).getId() == 3);</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">findUsersTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//断言此时返回的用户列表数大于0</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">findUsers</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">null</span></span><span class="pun" style="color:rgb(102,102,0);">).</span><span class="pln" style="color:rgb(0,0,0);">size</span><span class="pun" style="color:rgb(102,102,0);">()</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">0</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//断言此时返回的用户列表数等于3,数字你可以随便写,用户数可能是错的,如果报错你会看到控制台一片红色</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">findUsers</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">null</span></span><span class="pun" style="color:rgb(102,102,0);">).</span><span class="pln" style="color:rgb(0,0,0);">size</span><span class="pun" style="color:rgb(102,102,0);">()</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">==</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">3</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">getTotalUserTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">getTotalUser</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">null</span></span><span class="pun" style="color:rgb(102,102,0);">)</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">0</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">getTotalUser</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">null</span></span><span class="pun" style="color:rgb(102,102,0);">)</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">==</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">3</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span><span class="pln" style="color:rgb(0,0,0);">
//使用update、insert、delete方法时,会得到一个返回值,这个返回值说明了执行一条sql语句后,表中有多少条记录被影响了。
//比如用update修改一条记录,如果修改成功了,返回值为1,返回0则是修改失败。
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">updateUserTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pln" style="color:rgb(0,0,0);"> user </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">new</span></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pun" style="color:rgb(102,102,0);">();</span><span class="pln" style="color:rgb(0,0,0);">
user</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setId</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">51</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
user</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setPassword</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"1221"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//大于0的意思是成功修改了一条记录,即修改成功,如果updateUser()方法返回值等于0,即修改失败</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">updateUser</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">user</span><span class="pun" style="color:rgb(102,102,0);">)</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">0</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pln" style="color:rgb(0,0,0);"> user2 </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">new</span></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pun" style="color:rgb(102,102,0);">();</span><span class="pln" style="color:rgb(0,0,0);">
user2</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setId</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">1000</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
user2</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setPassword</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"234y9823y89hhao"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">updateUser</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">user2</span><span class="pun" style="color:rgb(102,102,0);">)</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">0</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">addUserTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pln" style="color:rgb(0,0,0);"> user </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">new</span></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="typ" style="color:rgb(102,0,102);">User</span><span class="pun" style="color:rgb(102,102,0);">();</span><span class="pln" style="color:rgb(0,0,0);">
user</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setUserName</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"测试用户"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
user</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setPassword</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">MD5Util</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">MD5Encode</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"testuser"</span></span><span class="pun" style="color:rgb(102,102,0);">,</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"UTF-8"</span></span><span class="pun" style="color:rgb(102,102,0);">));</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//大于0的意思是影响了数据库中的一条记录,即添加成功</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">addUser</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">user</span><span class="pun" style="color:rgb(102,102,0);">)</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">0</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">deleteUserTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Assert</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">assertTrue</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">userDao</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">deleteUser</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">51</span></span><span class="pun" style="color:rgb(102,102,0);">)</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">0</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span><span class="pln" style="color:rgb(0,0,0);">
}
大家可以将代码pull到本地进行测试,并根据上面几个方法写一下自己的测试用例。
service的单元测试其实service层的单元测试和dao层并没有太多区别,唯一的不同可能就是service层方法中可以执行多条sql语句,而dao层的方法只能执行一条sql语句,因此这个例子更侧重于讲一下事务问题。
配置文件:
<!-- 配置事务通知属性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!-- 定义事务传播属性 -->
<tx:attributes>
<!--事务切面中insert开头的方法会被纳入事务管理中-->
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="upd*" propagation="REQUIRED"/>
</tx:attributes>
......
</tx:advice>
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment"><!-- 配置事务切面 --></span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="tag" style="color:rgb(0,0,136);"><span class="hljs-tag"><<span class="hljs-name">aop:config</span>></span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="tag" style="color:rgb(0,0,136);"><span class="hljs-tag"><<span class="hljs-name">aop:pointcut</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-tag"> </span></span><span class="atn" style="color:rgb(102,0,102);"><span class="hljs-tag"><span class="hljs-attr">id</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-tag">=</span></span><span class="atv" style="color:rgb(0,136,0);"><span class="hljs-tag"><span class="hljs-string">"serviceOperation"</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-tag">
</span></span><span class="atn" style="color:rgb(102,0,102);"><span class="hljs-tag"><span class="hljs-attr">expression</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-tag">=</span></span><span class="atv" style="color:rgb(0,136,0);"><span class="hljs-tag"><span class="hljs-string">"(execution(* com.ssm.maven.core.service.*.*(..)))"</span></span></span><span class="tag" style="color:rgb(0,0,136);"><span class="hljs-tag">/></span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="tag" style="color:rgb(0,0,136);"><span class="hljs-tag"><<span class="hljs-name">aop:advisor</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-tag"> </span></span><span class="atn" style="color:rgb(102,0,102);"><span class="hljs-tag"><span class="hljs-attr">advice-ref</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-tag">=</span></span><span class="atv" style="color:rgb(0,136,0);"><span class="hljs-tag"><span class="hljs-string">"txAdvice"</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-tag"> </span></span><span class="atn" style="color:rgb(102,0,102);"><span class="hljs-tag"><span class="hljs-attr">pointcut-ref</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-tag">=</span></span><span class="atv" style="color:rgb(0,136,0);"><span class="hljs-tag"><span class="hljs-string">"serviceOperation"</span></span></span><span class="tag" style="color:rgb(0,0,136);"><span class="hljs-tag">/></span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="tag" style="color:rgb(0,0,136);"><span class="hljs-tag"></<span class="hljs-name">aop:config</span>></span></span></code><div class="hljs-button" data-title="复制"></div></pre>
业务方法:
//通过Spring的配置文件,此方法已经纳入到其事务管理下
//发生异常时会触发事务回滚,数据不会被更改
public int insertStore(Store store) {
int level = Integer.valueOf(store.getLevel());
for (int i = 1; i < level; i++) {
store.setLevel(i + "");
storeDao.insertStore(store);
}
store.setLevel(level + "");
int result = storeDao.insertStore(store);
int i = 10 / 0;
//发生异常,操作回滚.
//可以试着将上面一条语句注释掉再运行测试用例,看看有什么区别。
return result;
}
测试用例:
@RunWith(SpringJUnit4ClassRunner.class) //指定测试用例的运行器 这里是指定了Junit4
@ContextConfiguration("classpath:applicationContext.xml")
//@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
//不添加此设置,测试service层的事务管理
//service层与dao层的测试时相同的,不同之处,在于service层多数都会在配置文件中配置spring的事务管理
public class StoreServiceTest {
@Autowired
private StoreService storeService;
</span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-meta">@Test</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">public</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-function"><span class="hljs-keyword">void</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> <span class="hljs-title">insertStoreTest</span></span></span><span class="pun" style="color:rgb(102,102,0);"><span class="hljs-function"><span class="hljs-params">()</span></span></span><span class="pln" style="color:rgb(0,0,0);"><span class="hljs-function"> </span></span><span class="pun" style="color:rgb(102,102,0);">{</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="typ" style="color:rgb(102,0,102);">Store</span><span class="pln" style="color:rgb(0,0,0);"> store </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">new</span></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="typ" style="color:rgb(102,0,102);">Store</span><span class="pun" style="color:rgb(102,102,0);">();</span><span class="pln" style="color:rgb(0,0,0);">
store</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setLevel</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"5"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
store</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">setNumber</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="str" style="color:rgb(0,136,0);"><span class="hljs-string">"TEST"</span></span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
storeService</span><span class="pun" style="color:rgb(102,102,0);">.</span><span class="pln" style="color:rgb(0,0,0);">insertStore</span><span class="pun" style="color:rgb(102,102,0);">(</span><span class="pln" style="color:rgb(0,0,0);">store</span><span class="pun" style="color:rgb(102,102,0);">);</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="kwd" style="color:rgb(0,0,136);"><span class="hljs-keyword">int</span></span><span class="pln" style="color:rgb(0,0,0);"> i </span><span class="pun" style="color:rgb(102,102,0);">=</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">10</span></span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="pun" style="color:rgb(102,102,0);">/</span><span class="pln" style="color:rgb(0,0,0);"> </span><span class="lit" style="color:rgb(0,102,102);"><span class="hljs-number">0</span></span><span class="pun" style="color:rgb(102,102,0);">;</span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="com" style="color:rgb(136,0,0);"><span class="hljs-comment">//这里发生异常是不会回滚的,因为此方法并没有被纳入事务管理中</span></span><span class="pln" style="color:rgb(0,0,0);">
</span><span class="pun" style="color:rgb(102,102,0);">}</span><span class="pln" style="color:rgb(0,0,0);">
}
这个例子可能有些简单,一般业务层方法都会较为复杂,如下:
function(){
-A-
SQL1
-B-
SQL2
-C-
SQL3
-D-
}
那么执行此方法时,无论在A处、B处、C处、D处发生异常,都会触发事务回滚,关于Spring的事务管理及事务传播属性,想了解的可以自己去查询一下。
总结本篇主要讲了数据层和业务层的测试,下一篇主要会讲一下controller控制层的测试,睡觉啦...
作者: 涵s
链接:http://www.imooc.com/article/17673
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!