单体测试应该简单而直观。。。至少在理论上是这样。接上来我们详细介绍一下断言功能
通过反射和断言
先写一个普通类User.java
- package tiger;
- public class User {
- private long id;
- private String first;
- private String last;
- public User(long id, String first, String last) {
- this.id = id;
- this.first = first;
- this.last = last;
- }
- }
一个典型的测试方法
- public class TestUser {
- public void testUser(){
- User user1 = new User(1, "John", "Doe");
- User user2 = new User(1, "John", "Doe");
- assertEquals(user1, user2); //failed
- }
- }
你本来期望这个断言是正确的,很可惜,失败了。因为assertEquals实现上是通过 user1 == user2来比较的。结果失败。
Unitils 提供一这种断言,使用 ReflectionAssert.assertRefEquals ,测试代码如下;
- package tiger;
- import org.junit.Test;
- import org.unitils.UnitilsJUnit4;
- import static
- org.unitils.reflectionassert.ReflectionAssert.assertRefEquals;
- public class UserTest extends UnitilsJUnit4{
- @Test
- public void testUser()
- {
- User user1 = new User(1, "John", "Doe");
- User user2 = new User(1, "John", "Doe");
- assertRefEquals(user1, user2); //success
- }
- }
当然了,在我们运行上面这个测试之前,我们得小小配置一下,下载testng库还有一些依赖库。 建立一个普通的Java工程,导入User.java和UserTest.java文件,再引入 unitils和junit库。这时候你发现运行不了, 出现一个NoClassDefFoundError异常。如图:
管不了那么多,估计是缺少库,于是把所有依赖库全部引入,果然这个问题解决了,不过又有了新的问题,出现UnitilsException,配置文件有问题。
下面会讲到,这里我们就直接写了 ,建立
unitils.properties 文件,放到src文件夹下。
- unitils.module.database.className=org.unitils.database.DatabaseModule
- unitils.module.database.runAfter=
- unitils.module.database.enabled=false
- unitils.module.hibernate.className=org.unitils.orm.hibernate.HibernateModule
- unitils.module.hibernate.runAfter=
- unitils.module.hibernate.enabled=false
- unitils.module.dbunit.className=org.unitils.dbunit.DbUnitModule
- unitils.module.dbunit.runAfter=
- unitils.module.dbunit.enabled=false
- unitils.module.easymock.className=org.unitils.easymock.EasyMockModule
- unitils.module.easymock.runAfter=
- unitils.module.easymock.enabled=false
- unitils.module.inject.className=org.unitils.inject.InjectModule
- unitils.module.inject.runAfter=
- unitils.module.inject.enabled=false
- unitils.module.spring.className=org.unitils.spring.SpringModule
- unitils.module.spring.runAfter=database
- unitils.module.spring.enabled=false
- unitils.module.jpa.className=org.unitils.orm.jpa.JpaModule
- unitils.module.jpa.runAfter=
- unitils.module.jpa.enabled=false
这时候再运行,一切OK