unit-testing - 为什么 Spock 不记录由间谍对象的方法完成的调用?
问题描述
我正在使用 Spock 框架的帮助编写一个基于交互的测试,我想在其中检查一个方法是否调用了另一个方法一次。
被测类如下所示:
class ClassUnderTest {
def a() {
b()
}
def b() {}
}
我的测试用例看起来像这样
class ClassUnderTestTest extends Specification {
ClassUnderTest cut
ClassUnderTest spied
def setup() {
cut = new ClassUnderTest()
spied = Spy(cut)
}
def "Method a() calls method b()"() {
when:
spied.a()
then:
1 * spied.a()
1 * spied.b()
}
}
运行这个测试,Spock 只识别对 的调用,a()
而不是对 的调用b()
。
我做错了什么或错过了什么?
解决方案
您的代码有效,请确保您拥有spock-core
当前版本的最新版本2.0-groovy-3.0
,您还需要byte-buddy
模拟类而不仅仅是接口。
推荐阅读
- sql-server - SQL Server 2016 报表生成器不显示数据
- android - 我应该只写标识符还是在 Firestore 的字段文档中写所有数据?
- java - VisualVM not working on Windows 10: jpswin2
- php - UniSharp/Laravel Filemanager 将数据保存到数据库表
- elasticsearch - Elasticsearch:如果满足条件,则将字段从嵌套子级拉到父级
- python - 移动误差线图 wrt hist 图
- python - Scapy 字节与数据表示不同
- sql - 根据记录 SQL Server 获取百分比
- sql - 使用 SQL 查询的结果填充 Excel 用户表单文本框
- javascript - 使用异步函数返回 Promise