私はこれを撃ちます:。
まず、あなたがテストを書いた方法に間違いはありません。
テスト ケースの説明に基づいて、このテスト ケースは連絡先のリストを格納するAddressBookクラス用であり、 AddressBookクラスによって公開されるメソッドaddContactをテストしていると仮定します。
ただし、 addContactメソッドで以下のようなことを行うことで、クラスをもう少し堅牢にすることができます。
public void addContact(Contact contact) throws IllegalArgumentException
{
if(contact == null)
{
//throw an exception after logging that contact is null
throw new IllegalArgumentException("Passed in contact cannot be null!!")
}
this.contactsList.add(contact);
}
testAddOneContactのテスト コードは、2 つの異なる入力ケースをテストする必要があります。これは、2 つの別々のテスト ケースを使用して以下のように実行できます。
@Test
public void testAddOneContact() {
final Contact contact = this.context.mock(Contact.class);
this.addressBook.addContact(contact);
assertTrue("Object added to list", this.addressBook.getNumberOfContacts() == 1);
//assuming that Contact class implements the equals() method you can test that the contact
//added is indeed the one that you passed in
assertTrue(addressBook.get(0).equals(contact));
}
//the below test ensures that there is exception handling mechanism within your library code
@Test
@Expected(IllegalArgumentException.class)
public void testShouldThrowWhenContactIsNull()
{
this.addressBook.addContact(null);
}
余談ですが、優れたテスト クラスを実装すると、API として公開されるメソッドの設計と、特定のメソッドがどのようにオーバーライドされ、オーバーライドされる必要があるかについて考えるようになることに注意してhashCode
くださいequals()
。また、「エラー ケースをどのように処理すればよいか」ということも考えさせられます。このような思慮深い質問は、出荷するコードが、解決すべき問題を効率的かつエラーのない方法で正確に解決するために不可欠です。
お役に立てれば