私は、ASP.NET MVC4 Web APIプロジェクトに、ODataQueryOptionsパラメータを受け入れるApiControllerを継承するコントローラを1つその入力。ASP.NET Web APIコントローラのnunitテストで新しいSystem.Web.Http.OData.Query.ODataQueryOptionsをインスタンス化する
プロジェクトのテストにNUnitとMoqを使用しています。これにより、ApiControllerで使用されている関連するリポジトリメソッドからの缶詰の応答をセットアップできます。これはのように、作品:私が持っている
[TestFixture]
public class ProjectControllerTests
{
[Test]
public async Task GetById()
{
var repo = new Mock<IManagementQuery>();
repo.Setup(a => a.GetProjectById(2)).Returns(Task.FromResult<Project>(new Project()
{
ProjectID = 2, ProjectName = "Test project", ProjectClient = 3
}));
var controller = new ProjectController(repo.Object);
var response = await controller.Get(2);
Assert.AreEqual(response.id, 2);
Assert.AreEqual(response.name, "Test project");
Assert.AreEqual(response.clientId, 3);
}
}
課題は、このパターンを使用するために、私はコントローラに関連するクエリ文字列パラメータを渡すだけでなく、リポジトリ(これは実際に私の意図した)する必要があるということです。しかし、ODataQueryOptionsの場合、ApiControllerメソッドを受け入れる場合、ODataQueryOptionsのデフォルトパラメータを使用したい場合でも、インスタンス化する方法を知る必要があります。これは面倒です:
- ODataQueryOptionsはインターフェイスを実装していないので、私はそれを直接模擬することはできません。
- コンストラクタには、Microsoft.Data.Edm.IEdmModelを実装するものが必要なSystem.Web.Http.OData.OData.QueryContextの実装が必要です。このドキュメントでは、ドキュメントが不足しており、Visual Studio 2012参照の参照と呼び出し階層の表示洞察を提供しないでください(そのインターフェースを実装するものは何ですか?)。
これを行うにはどうすればよいですか?
ありがとうございました。
まあを注入するためにテストし、彼らは主に関連するオブジェクトをしています...これは本当ですか? objectcontext => odataqueryoptionsから行く方法がなければなりません、そうですか? – user483679