簡體   English   中英

將 Moq 用於通用方法

[英]Using Moq for Generic methods

完全簡單的情況,但我不能讓它工作。 我遇到了使用 Moq 模擬通用方法的問題(在本例中,在 Ninject Kernel 接口上):

T Get<T>();

我設置了我的模擬 object:

Mock<IKernel> mockKernel = new Mock<IKernel>();
        mockKernel.Setup(x => x.Get<IGetUserQuery>()).Returns(new GetUserQuery());

在運行時,我得到以下異常:

Expression references a method that does not belong to the mocked object: x => x.Get<IGetUserQuery>(new[] {  })

知道為什么要扔這個嗎? 我之前在 Moq 中模擬了 generics 沒有問題......是否存在不支持通用 mocking 的情況? 這似乎是一個簡單的案例。 唯一的問題是 IGetUserQuery 又繼承自一個泛型類型:

IGetUserQuery : ICommand<UserQueryInput, UserQueryOutput>

我不認為這會造成問題,因為 ICommand 的這個實現的泛型類型是由 IGetUserQuery 靜態定義的,所以我懷疑這會混淆 Moq。

提前致謝

問題是T Get<T> ()實際上不是 IKernel 接口中定義的方法,它是此處定義的擴展方法。

你為什么要首先模擬T Get<T> () 與 IoC 容器的交互應該是絕對最小的,通常只是在系統的頂層“入口點”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM