12

入力の 1 つとして ODataQueryOptions パラメーターを受け入れる ApiController 継承コントローラーを使用する ASP.NET MVC4 Web API プロジェクトがあります。

私は 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 はインターフェイスを実装していないため、直接モックすることはできません。
  • コンストラクターには、System.Web.Http.OData.ODataQueryContext の実装が必要です。これには、Microsoft.Data.Edm.IEdmModel を実装する何かの実装が必要です。ドキュメントは不足しており、Visual Studio 2012 の参照の検索と呼び出し階層の表示は提供されません。洞察 (そのインターフェースを実装するものは何ですか?)。

私は何をする必要がありますか/これを行うためのより良い方法はありますか?

ありがとう。

4

2 に答える 2