【发布时间】:2017-06-19 06:52:33
【问题描述】:
当在我的助手类的静态方法中调用 getMarkup() 时,它会引发 NPE。我所做的是嘲笑 MarkupMaker 及其返回值,即 Markup 的一个实例。最终我想调用标记实例的toString()。无论我做什么——getMarkup() 的调用都在抛出一个 NPE。我找不到任何文档告诉我如何详细模拟 spock 中的方法调用值。
编辑:我添加了示例。 maker.getMarkup() 的调用返回 null 即使我在 spock 测试中嘲笑它。
Test.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(执行mocked对象的方法)
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";
}
}
【问题讨论】:
-
请发帖MVCE。从这个 sn-p 中并不清楚如何调用有问题的代码。
-
好的 WIP atm