【发布时间】:2014-03-25 04:00:38
【问题描述】:
这不是我的代码的样子,但它会接近我想要的示例
class Phone {
public makeCall(String number) {
addEntryToCallLog(number)
//eventually make a call
}
private void addEntryToCallLog(String number) {
//make database calls
}
}
class PhoneTest {
Phone phone
@Test
public void canMakeACall() {
//mock the behaviour of phone.addEntryToCallLog to prevent database exceptions
phone.makeCall("1223");
//Assert somehow that call was made << --IGNORE this NOT IMPORTANT
}
}
我想在单元测试中测试“makeCall”,但是当我这样做时,代码会抛出一些数据库异常,从而破坏我的测试。 我认为能够测试模拟 java 私有方法的行为是合理的,因为这允许所有测试的行为一致。
我过去使用过 groovy,通过它我可以使用 spock 来模拟私有方法的行为。我也可以使用元类对我创建的实例做同样的事情。但是在 java 中似乎没有直接的方法来做到这一点。
我也尝试过 mockito 和 power mockito,但它们允许我更改私有方法的返回值,但它们不允许我更改行为。
这似乎是一个显而易见的事情,有人已经处理过。我想我错过了一些东西。但它是什么。
【问题讨论】:
-
Mockito 模拟调用,默认情况下,除了返回您指定的值外,根本没有任何行为。这应该做你想做的,因为不会进行数据库调用。
标签: java unit-testing mocking mockito junit4