作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试编写一个单元测试,需要确认是否调用了某个方法。我正在使用 JUnit、Mockito 和 PowerMock。
public class Invoice{ protected void createInvoice() { // random stuff here markInvoiceAsBilled("57"); } protected void markInvoiceAsBilled(String code) { // marked as billed } }
所以,这里我的测试系统是Invoice
。我正在运行这个测试:
public class InvoiceTest { @Test public void testInvoiceMarkedAsBilled() { Invoice sut = new Invoice(); Invoice sutSpy = spy(sut); sut.createInvoice(); // I want to verify that markInvoiceAsBilled() was called } }
这个例子只是实际代码的一个例子....
我的问题是 mockito 说你只能验证是否在模拟对象上调用了方法...但我不想模拟这个对象,因为它是我正在测试的对象。我知道您可以监视正在测试的对象,所以这是我尝试过的:
verify(sutSpy).markInvoiceAsBilled("57");
我想做的事情是不可能的吗?还是我只是用错了方法?
谢谢大家:)
最佳答案
我不确定您尝试做的事情是否是解决问题的最佳方式。
我不会关心验证 Invoice.createInvoice()
是否调用内部私有(private)方法 markInvoiceAsBilled()
- 而是测试调用 createInvoice( )
以您期望的方式更改 Invoice 对象的状态 - 即 status
现在是 BILLED
或类似的东西。
换句话说 - 不要测试 createInvoice()
调用了哪些方法 - 测试调用此方法后,对象的 state 是否符合您的预期.
关于java - 如何验证是否在被测系统上调用了方法(不是模拟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429157/
我是一名优秀的程序员,十分优秀!