gpt4 book ai didi

java - Spock Mocking - 我的方法调用值没有被模拟

转载 作者:行者123 更新时间:2023-12-01 20:21:22 25 4
gpt4 key购买 nike

调用getMarkup()时在我的辅助类的静态方法中,它抛出一个 NPE。我所做的是模拟 MarkupMaker 及其返回值(Markup 的一个实例)。最终我想调用toString()标记实例的。无论我做什么——getMarkup()的召唤正在抛出 NPE。我找不到任何文档告诉我如何详细模拟 spock 中的方法调用值。

编辑:我添加了示例。 maker.getMarkup()的来电即使我在 spock 测试中 mock 它,也返回 null。

测试.groovy

class TestExample extends Specification {

@Shared
MarkupMaker makerMock = Mock()
@Shared
MarkupObject markupMock = Mock()

def setup() {
markupMock.toString() >> "headline1"
makerMock.getMarkup() >> markupMock
}

@Unroll
def "Should return a Markupvalue #expectedvalue"(MarkupMaker helper, int tabElementIndex, String expectedValue) {
expect:
MarkupHelper.getMarkupForIndex(helper, tabElementIndex) == expectedValue
where:
helper | tabElementIndex | expectedValue
makerMock | 1 | "headline1"

}

}

Helper.java(执行模拟对象的方法)

public class MarkupHelper {

public static MarkupObject getMarkupForIndex(MarkupMaker maker, int index){
if(index == 1){
maker.getMarkup();
}
return null;
}
}

MarkupMaker.java(模拟对象之一)

public class MarkupMaker {

public MarkupObject getMarkup() {
return new MarkupObject();
}
}

MarkupObject.java(保存测试值的最后一个模拟对象)

public class MarkupObject {
@Override
public String toString() {
return "headline1";
}
}

最佳答案

删除模拟上的@Shared,因为模拟不支持它。

关于java - Spock Mocking - 我的方法调用值没有被模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44623996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com