-1
我在写“GOOD”单元测试用例方面比较新。在测试用例中返回的对象是否严格断言?
我的POJO类是:
public class User {
private String userId;
private String email;
private String name;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我的界面:
public interface UserDao {
List<User> getUsersByEmail(String email);
}
我的测试用例是;
public class UserDaoTest {
private UserDao userDao;
@Test
public final void testUsersGetByEmailFunctional()
{
final String email="[email protected]";
List<User> usersByEmail = userDao.getUsersByEmail(email);
Assert.assertNotNull(usersByEmail);
for(User user : usersByEmail)
{
Assert.assertEquals(user.getEmail(), email);
}
}
/**
* NOTE : Consider that User.equals() method is not available due to other constraints
*/
@Test
public final void testUsersGetByEmailStrict()
{
final String email="[email protected]";
final String expectedName="xxx";
final String expectedUserId="123";
List<User> usersByEmail = userDao.getUsersByEmail(email);
Assert.assertNotNull(usersByEmail);
for(User user : usersByEmail)
{
Assert.assertEquals(user.getEmail(), email);
Assert.assertEquals(user.getName(), expectedName);
Assert.assertEquals(user.getUserId(), expectedUserId);
}
}
}
现在我的问题是,哪个测试用例最合适?
http://howtodoinjava.com/2012/11/05/unit-testing-best-practices-junit-reference-guide/
该帖称,
不要进行不必要的断言
记住,单元测试有一定的 行为应该如何工作的设计规格,不代码碰巧发生的所有事情的观察列表。
不要试图断言一切都只是专注于你正在测试 否则你会最终有一个 单一的原因,不实现任何帮助多个测试用例失败。
这是什么意思?
感谢您的回复。既然你提到assertNotNull(usersByEmail)是不必要的,我有一个问题。测试用例本身可以抛出异常。理想情况下,如果测试用例失败,我认为它应该是因为断言而不是测试用例本身。纠正我,如果我错了。 – 2014-08-28 05:54:33
@TariqSulaiman通常一个测试方法签名是'@Test public void testSomething()throws Exception'。测试过程中引发的任何异常都会使其变为红色。 – kan 2014-08-28 07:14:42
感谢您的回复。 @kan – 2014-08-28 08:49:17