2017-02-28 22 views
1

私はSpockを使用していますが、テストするクラスはSpyでラップされています。 テストされるメソッドを分離したいので、テストされているメソッドから呼び出される他のメソッドをスタブアウトしようとしています。 通常、私はこのようなものを使用します。SpockでSpockオブジェクトのvoidメソッドをスタブで

1 * classToTest.methodName(_) >> stubbed_return_value 

私の問題はこれです:methodNameはvoidメソッドです。 私はこの試みた:

1 * classToTest.methodName(_) 

を実際の方法は、まだ呼ばれています。

Spockを使用してvoidメソッドをスタブアウトするにはどうすればよいですか?

+0

Spockで私はプライベートメソッドを模倣することはできません:私はスパイで通常と同じように実行されます。私はあなたのスパイからそのようなメソッドを呼び出すことができるという意味で、テストコードでこのSpockの "制限"を発見しました(実際にはテストの意味がないからです)。 Spockがこれを許可しないか、エラーとしてフラグを立てる可能性があります。 –

答えて

2

あなただけnullでそれをスタブすることができます...

は、次のJavaクラスを考える:

public class Complex { 
    private final List<String> sideEffects = new ArrayList<>(); 

    protected void sideEffect(String name) { 
     sideEffects.add("Side effect for " + name); 
    } 

    public int call(String name) { 
     sideEffect(name); 
     return name.length(); 
    } 

    public List<String> getSideEffects() { 
     return sideEffects; 
    } 
} 

我々はsideEffect方法を非表示にしたいので、何もそれによって行われませんので、我々が使用することができます次のスペック:

関連する問題