1

WebAPI ベースの REST サービスから、OData の新しい実装を含むサービスに移行しようとしています。サービスは正しく動作していますが、odata クエリ オプションをテストする単体テストを作成する方法がわかりません。

WebAPI メソッドを単体テストするとき、私は httpRequestMessage を構築し、それを構造に注入することに慣れています。

var request = new HttpRequestMessage();
        request.Headers.Add("UserName", "TestUser");
        request.Headers.Add("Password", password);
        request.Headers.Add("OverRideToken", "false");
        request.Headers.Add("AccessSystem", "Mobile");
        request.Headers.Add("Seed", "testSeed");

        var token = new Token();

        var authController = new AuthorizationController(request);
        try
        {

            var returnValue = authController.Get();

odata リクエストを挿入するにはどうすればよいですか? $filter、$inlinecount、およびその他のオプションが適切なレコードを返すことを確認する必要があります。

4

1 に答える 1

0

コントローラーをテストするか、Web API の実行中のインスタンスに対してテストすることができます (おそらく両方を行う必要があります)。

コントローラーをテストしても目的が達成されないため、Web API アプリケーションの自己ホスト型インメモリ インスタンスを作成してテストする必要があります。次に、テスト クラスで HttpClient を使用するか (OData 要求を手動で作成する必要があります)、テスト クラスで WCF Data Services Client を使用できます (これにより、LINQ を介してクエリを実行できます)。

WCF Data Services クライアントを使用した例を次に示します。

public class ODataContainerFactory
{
    static HttpSelfHostServer server;

    public static MyApplicationServer.Acceptance.ODataService.Container Create(Uri baseAddress)
    {
        var config = new HttpSelfHostConfiguration(baseAddress);

        // Remove self host requirement to run with Adminprivileges
        config.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.Exact;

        // Register Web API and OData Configuration
        WebApiConfig.Register(config);

        // Configure IoC
        ConfigureIoC(dataSource, config);

        // Do whatever else, e.g. setup fake data sources etc.
        ...

        // Start server
        server = new HttpSelfHostServer(config);
        server.OpenAsync().Wait();

        // Create container
        var container = new MyApplicationServer.Acceptance.ODataService.Container(new Uri(baseAddress.ToString() + "odata/"));

        // Configure container
        container.IgnoreResourceNotFoundException = true;
        container.IgnoreMissingProperties = true;

        return container;
    }

    private static void ConfigureIoC(MockDatasource dataSource, HttpSelfHostConfiguration config)
    {
        var container = new UnityContainer();
        container.RegisterType<TypeA, TypeB>();
        ...
        ...
        config.DependencyResolver = new IoCContainer(container);
    }

    public static void Destroy()
    {
        server.CloseAsync().Wait();
        server.Dispose();
    }
}

ここで重要なのは、Web API プロジェクトを呼び出す WebApiConfig.Register(HttpConfiguration config) メソッド呼び出しです。

上記の前に、次のものが必要になることに注意してください。

  1. Web API プロジェクトを開始する
  2. テスト クラスで、サービス参照を OData ルート パスに追加します。

これにより、Container オブジェクト (上記の例では MyApplicationServer.Acceptance.ODataService.Container) が作成されます。これを使用して、次のようにテストで OData フィードをクエリできます。

var odataContainer = ODataContainerFactory.Create(new Uri("http://localhost:19194/");

var result = odataContainer.MyEntities
                .Expand(s => s.ChildReferenceType)
                .Where(s => s.EntityKey == someValue).SingleOrDefault();
于 2013-09-14T04:48:44.950 に答える