-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