我總是想知道我應該測試我的代碼的多少(單元測試)。我應該單元測試我的代碼多少錢
比方說,我有這個組件:
@Stateless
public class UserManager {
@PersistenceContext
EntityManager entityManager;
@Inject
Event<UserEvent> event;
public User getUserByUsername(String username) {
User user = entityManager
.createQuery("SELECT u FROM User u WHERE u.username = :username", User.class)
.setParameter("username", username)
.getSingleResult();
event.fire(new UserEvent("some message"));
return user;
}
}
要真正徹底地測試它,我應該嘲笑事件和EntityManager的。 那我應該怎麼做?
- 驗證entityManager上的createQuery方法只在給定的JPQL語句中調用一次。
- 驗證setParameter方法是否與給定參數一起被調用一次。
- 確認方法getSingleResult只被調用一次。
- 驗證事件是否與給定參數一起被觸發。
- 測試是否返回了正確的用戶。
全部?在我看來,這是非常有侵略性的,因爲在我的測試中需要完成的變化中的每個小改動都會導致變化。
我有兩個有點不同的問題,我認爲是相關的。
Q2:在的Arquillian webiste,你可以看到這一點:
的Arquillian咱們你溝嘲笑和編寫真正測試。
是否意味着我不應該使用模擬對象?怎麼能(用arquillian)我真的徹底測試我的代碼呢?
問題3:根據TDD,您應該先編寫測試,然後再編寫測試。但是如果你沒有實現或api,你想怎麼做,所以測試不會編譯?