Я хочу использовать spock, чтобы узнать, был ли вызван метод в классе.Но когда я пытаюсь это проверить, блок when говорит, что метод никогда не вызывался.
public class Bill {
public Bill(Integer amount) {
this.amount = amount;
}
public void pay(PaymentMethod method) {
Integer finalAmount = amount + calculateTaxes();
method.debit(finalAmount);
}
private Integer calculateTaxes() {
return 0;
}
private final Integer amount;
}
public class PaymentMethod {
public void debit(Integer amount) {
// TODO
}
public void credit(Integer amount) {
// TODO
}
}
import spock.lang.Specification
import spock.lang.Subject
class BillSpec extends Specification {
@Subject
def bill = new Bill(100)
def "Test if charge calculated"() {
given:
PaymentMethod method = Mock()
when:
bill.pay(method)
then:
1 * method.debit(100)
// 1 * bill.calculateTaxes() // Fails with (0 invocations) error
0 * _
}
}
В приведенном выше примере все, что я хочу сделать, этопроверьте, вызывается ли метод convertTaxes, но проверка завершается с ошибкой (0 вызовов).Я пытался использовать шпион, но не уверен, какой будет синтаксис, поскольку Билл принимает параметризованный конструктор.