2016-05-10 29 views
4

私は3つの引数で呼び出されているメソッドを検証するSpock仕様を作成しようとしています。私は最初の2つについてはまったく気にしません。 私はSpockワイルドカードの引数マッチングを使用しようとしていますが、問題は継続しています。私の検証は、次のようになります。ここではSpockフレームワーク:一致するワイルドカード引数

when: 
    packageUploadController.handleUpload(httpRequest) 

    then: "the value of the 'dest' parameter is passed on to saveservice" 
    saveService.saveImportPackage(_ as UploadedPackage, _ as PackageImportResponse.Builder) 

saveServiceモックで、UploadedPackageとPackageImportResponse.Builderが期待される引数です。 saveServiceを呼び出すコードを変更する前に、まず動作テストに着手しようとしています。

私の知る限り、文書として、私はこれをやって見ることができるように、しかし、テストは次のメッセージで失敗します。私の生産コードを示すように思われるよう

org.codehaus.groovy.runtime.typehandling.GroovyCastException: 
Cannot cast object '_' with class 'org.spockframework.lang.Wildcard' to 
class 'UploadedPackage' due to: 
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: 
UploadedPackage(org.spockframework.lang.SpreadWildcard) 

私はこのメッセージを理解していないが引数としてSpreadWildCardを取るコンストラクタを提供する必要があります。私はここで間違って何をしていますか?

私もアウト種類を残すだけ(_, _)に一致しようとしたが、これも失敗します。ここでは

org.codehaus.groovy.runtime.metaclass.MissingMethodExceptionNoStack: No signature of method: 
SaveService$$EnhancerByCGLIB$$67b7324.saveImportPackage() is applicable for argument types: (org.spockframework.lang.Wildcard, org.spockframework.lang.Wildcard) values: [[*_], [*_]] 

をも私はドキュメントごとにそれをやっていると思うし、なぜこれを理解していません失敗しました(このエラーを取り除くためにタイプを追加しました)。

+0

私には解決策があると思いますが、誰でもこの効果の理由を説明できますか? 'saveImportPackage(_、_)'メソッドの戻り値の型は 'void'です。 'saveService.saveImportPackage(_ as UploadedPackage、_ as PackageImportResponse.Builder)>> void' テストは緑色になります - 戻り値の型を追加すると、引数の型についての警告がなぜ発生するのですか?どこかに行って?? –

+0

3を渡したいと思っている間に2つの引数を渡しているように見えますが、これが問題になりますか? – devnoo

+0

よく発覚しましたが、最初に2つの引数のケースのテストを行うようにしています.3番目の引数を検証するとテストが失敗し、テスト対象のコードに追加する必要があります(TDD ) –

答えて

4

これを保存してsaveService.saveImportPackage(_としてUploadedPackage、_としてPackageImportResponse.Builder)これは、同等のケースで動作するようです。 なぜ完全にはっきりしないのですか

then: "the value of the 'dest' parameter is passed on to saveservice" 
1 * saveService.saveImportPackage(_ as UploadedPackage, _ as PackageImportResponse.Builder) 
関連する問題