私は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: [[*_], [*_]]
をも私はドキュメントごとにそれをやっていると思うし、なぜこれを理解していません失敗しました(このエラーを取り除くためにタイプを追加しました)。
私には解決策があると思いますが、誰でもこの効果の理由を説明できますか? 'saveImportPackage(_、_)'メソッドの戻り値の型は 'void'です。 'saveService.saveImportPackage(_ as UploadedPackage、_ as PackageImportResponse.Builder)>> void' テストは緑色になります - 戻り値の型を追加すると、引数の型についての警告がなぜ発生するのですか?どこかに行って?? –
3を渡したいと思っている間に2つの引数を渡しているように見えますが、これが問題になりますか? – devnoo
よく発覚しましたが、最初に2つの引数のケースのテストを行うようにしています.3番目の引数を検証するとテストが失敗し、テスト対象のコードに追加する必要があります(TDD ) –