在我的幫助器類的靜態方法中調用getMarkup()
時,它會拋出一個NPE。我所做的是嘲弄MarkupMaker和它的返回值,這是Markup的一個實例。最終,我想調用Markup實例的toString()
。無論我做什麼 - getMarkup()
的電話都會拋出NPE。我找不到任何文檔告訴我如何在spock中詳細模擬方法調用值。Spock Mocking - 我的方法調用值沒有被模擬
編輯:我添加了這個例子。 maker.getMarkup()
的呼叫甚至在我在嘲笑測試中嘲笑它。
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(執行的嘲笑對象的方法)
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(https://stackoverflow.com/help/mcve)。從這段代碼中不清楚有問題的代碼是如何被調用的。 –
好吧WIP atm – xetra11