我写作比较新," 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="test@gmail.com";
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="test@gmail.com";
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/
引用说,
不要做出不必要的断言
请记住,单元测试是一种如何确定的设计规范 行为应该起作用,而不是一切观察列表 代码恰好。
不要试图断言所有内容只关注你正在测试的内容 否则你最终会有多个测试用例失败 单一的原因,无助于实现任何目标。
这是什么意思?
答案 0 :(得分:0)
单元测试通常是指盒式测试。所以,你应该知道你的代码并测试它应该做什么。如果getUsersByEmail
负责将数据加载到email / name / id字段中,那么您应断言。如果它将加载委托给不同的测试方法,那么您不需要再次重新测试。理想情况下 - 主代码中的任何逻辑更改(我的意思是不重构)都应该完全打破一个单元测试。
assertNotNull(usersByEmail)
是不必要的断言,因为如果它为null,你将在下一行获得NPE。