メンバーのプロバイダを使用してユーザーの詳細を更新するコントローラーアクションを単体テストしようとしています。これまで使用し易いMoqを使用しています。Moqを使用してVB.NETメソッドをモック
問題は、何も返さないメソッドへの呼び出しを模擬するようには思えないということです。
<TestMethod()> _
Public Sub Can_Update_User()
' Arrange
_membershipService.Setup(Function(x) x.UpdateUser(It.IsAny(Of MembershipUser)))
Dim controller As New UsersController(_membershipService.Object, _roleProvider.Object, _supportWorksService.Object, _portalClientService.Object)
' Act
Dim result As ViewResult = controller.Edit("testUser", New FormCollection)
' Assert
Assert.AreEqual("Index", result.ViewName)
End Sub
嘲笑メンバーシップサービスのセットアップがコンパイルされません、エラーは次のとおりです。
:なし アクセス「セットアップ」がこれらの引数 と呼ばれることができませんのでオーバーロードの解決に失敗しました
'パブリック関数 セットアップ(Of TResult)(式は )System.Linq.Expressions.Expression(Of System.Func(Of Services.IMembershipServic ( Services.IMembershipService、 TResult) ':式は 値を生成しません。 Moq.Language.Flowとして
( TResultの)「公共の機能設定(() Services.IMembershipService、 TResultの System.Func()の System.Linq.Expressions.Expressionとして表現)。 ISetup( Services.IMembershipService、 TResult) ': 型のデータ型は、これらの引数の から推測できません。データ のタイプを明示的に指定すると、この エラーを修正する可能性があります。 Services.IMembershipServiceの Moq.Language.Flow.ISetup(として
「公開機能 セットアップ( Services.IMembershipServiceの System.Action()の System.Linq.Expressions.Expression()として表現) ) ': 式は値を生成しません。
何が欠けていますか?私のクラスには、呼びたいメソッドがあるときはいつでもMoqを使用するよりも、偽のクラスを作成する必要がありますか?
編集:
[OK]を、周りの少し読みが、これはラムダが結果を持っている必要があります関数を()を使用して、VBで表現されている方法が原因であることを示唆しています。
誰かがこの問題を回避する方法を見つけたのですか、あるいは私は方法を偽造するためにMoqを捨てなければなりませんか?
私は上司に提案すれば、VB10を出すことができるように開発を延期しているので、彼は私を殺すでしょう! – Nick