单元测试中的模拟对象、桩对象与伪造对象
1. 模拟对象和桩对象的问题
在单元测试中,模拟对象(mocks)和桩对象(stubs)可以帮助我们隔离测试,模拟那些可能会带来问题的依赖。然而,使用它们也存在一些缺点,主要有以下两个方面:
- 导致不现实的测试 :当我们模拟一个类或函数时,需要决定模拟对象或桩对象的行为。这就存在一个风险,即我们可能让它们的行为与真实依赖的行为不同。这样一来,测试可能会通过,但代码在实际运行中却可能出现错误或漏洞。
- 例如,在测试 PaymentManager.settleInvoice() 函数时,我们测试了发票余额为正的情况。但发票也可能有负余额,比如客户收到退款或补偿。我们复制之前的测试用例代码,将发票余额设为 -$5,测试通过了,就认为该函数可以处理负余额发票。但实际上, BankAccountImpl.debit() 方法不接受负值,调用时会抛出 ArgumentException ,而使用模拟对象的测试并没有揭示这个问题。
void testSettleInvoice_negativeInvoiceBalance() {
BankAccount mockAccount = createMock(BankAccount);
MonetaryAmount invoiceBalance =
new MonetaryAmount(-5.0, Currency.USD);
Invoice invoice = new Invoice(invo
超级会员免费看
订阅专栏 解锁全文
56

被折叠的 条评论
为什么被折叠?



