gpt4 book ai didi

java - JMock - 没有期望的对象

转载 作者:行者123 更新时间:2023-12-01 13:56:04 26 4
gpt4 key购买 nike

我正在使用junt和jock。假设我有一个对象接口(interface) Contact,并且在我的测试类中有一个类似这样的方法:

@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);
}

方法addContact是这样实现的:

public void addContact(Contact contact) {

//Check if contact passed is valid. If it is, add it to address book
if(contact != null) {
this.contactsList.add(contact);
}
}

所以你可以看到我没有调用 Contact 接口(interface)的任何方法。因此,我不能对测试方法 testAddOneContact() 抱有任何期望。这是实现测试用例和使用 JMock 的正确方法吗(所以即使我没有任何期望)?

最佳答案

我会尝试一下:.

首先,我没有发现您编写测试的方式有任何不正确的地方。

根据测试用例描述,我假设测试用例是用于存储联系人列表的 AddressBook 类,并且您正在测试由AddressBook 类。

也就是说,您仍然可以通过在 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 测试代码必须测试两个不同的输入案例,这可以使用两个单独的测试案例来完成,如下所示

@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 公开的方法的设计,以及某些方法(例如 hashCodeequals() 需要被覆盖。它还会让您思考 - “我如何处理错误情况?”。这些深思熟虑的问题对于确保您正在交付的代码能够以高效且无错误的方式准确解决它应该解决的问题至关重要。

希望这有帮助

关于java - JMock - 没有期望的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19619614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com