在上面篇文章,我们的测试代码如下:
1
package com.martin.pdo;
2
3
import org.springframework.context.ApplicationContext;
4
5
import junit.framework.Assert;
6
import junit.framework.TestCase;
7
8
public class UserTest extends TestCase
{
9
10
public void testUser()
{
11
ApplicationContext context = JUnitTestHelper.getContext();
12
User user = (User) context.getBean("user");
13
User _u1 = new User();
14
_u1.setName("martin xus");
15
_u1.setSex('F');
16
_u1.setAge(100);
17
user.add(_u1);
18
19
Assert.assertNotNull(_u1.getId());
20
21
User _u2 = (User) user.loadByName("martin xus").get(0);
22
Assert.assertEquals(_u1.getId(), _u2.getId());
23
24
user.remove(_u2);
25
Assert.assertTrue(user.loadByName("martin xus").size() == 0);
26
}
27
28
}
29
而这些,必须要和spring&hibernate一起工作,必须保证数据库操作正确,而我们需要的只是测试这个类的本身!
有必要连hibernate,spring一起测试吗?当然没有,测试,只需要保证本代码完成相应的功能,即可.
那么就有必要更换测试方法:
mock便是首选,在这里我们选择了jmock (http://www.jmock.org
)
1
package com.martin.mock;
2
3
import org.jmock.Mock;
4
import org.jmock.MockObjectTestCase;
5
6
import java.util.List;
7
8
/** *//**
9
* @author martin.xus
10
*/
11
public class UserTest extends MockObjectTestCase
{
12
13
public void testAdd()
{
14
Mock mock = mock(UserManager.class);
15
User user = new User();
16
mock.expects(once()).method("add").with(isA(User.class));
17
UserManager manager = (UserManager) mock.proxy();
18
19
user.setManager(manager);
20
user.add(new User());
21
mock.verify();
22
}
23
24
public void testLoadByName()
{
25
Mock mock = mock(UserManager.class);
26
User user = new User();
27
28
mock.expects(once()).method("loadByName").with(isA(String.class)).will(returnValue(List.class));
29
UserManager manager = (UserManager) mock.proxy();
30
31
user.setManager(manager);
32
user.loadByName("martin");
33
mock.verify();
34
}
35
36
public void testRemove()
{
37
Mock mock = mock(UserManager.class);
38
User user = new User();
39
40
mock.expects(once()).method("remove").with(isA(User.class));
41
UserManager manager = (UserManager) mock.proxy();
42
43
user.setManager(manager);
44
user.remove(user);
45
mock.verify();
46
}
47
}
ok,测试通过