【发布时间】:2020-09-22 16:32:49
【问题描述】:
所以我正在努力学习 Spock,但我正在努力创建测试。
private WeaponWriter writer;
@Shared
def emptyObject = Mock(Weapon)
@Shared
def weaponMocked = Mock(Weapon)
def: "should flatten object"(){
given:
emptyObject.content() >> ""
weaponMocked.content() >> "BF Sword"
List<Weapon> weaponList = Arrays.asList(weapon1, weapon2)
writer = new WeaponWriter(weaponList)
when:
def text = writer.writeWeapon()
then:
text == expectedText
where:
weapon1 | weapon2 | expectedText
emptyObject | emptyObject | "Headline"
weaponMocked| emptyObject | "Headline" + "BF Sword"
weaponMocked| weaponMocked | "Headline" + "BF Sword" + "BF Sword"
}
如您所见,我想使用将Weapon 列表转换为一个字符串的方法来测试类。
而且我有三个测试用例,只有第一个工作正常。
WeaponWriter#writeWeapon 只是遍历武器列表,并为每个武器调用Weapon#content,然后将它们组合成一个字符串。
从我看到的出于某种原因嘲笑weaponMocked.content() >> "BF Sword" 不会返回BF Sword,有人知道为什么吗?
当我不使用参数化测试时,一切正常。
【问题讨论】:
-
请编辑您的问题,将其转换为MCVE。我看不到你在测试中的课程
Weapon和WeaponWriter,所以我不能说你的测试失败的原因。如果您想要答案,而不是纯粹的猜测,请改进问题。谢谢你。顺便说一句,@Shared通常被过度使用并具有潜在危险,因为理想情况下测试不应该对彼此产生副作用。为什么你认为你需要它?
标签: unit-testing groovy spock