2017-08-29 15 views
1

以下のコードでは、リクエスト "System"に "Portal"という値が追加されているかどうかを確認する必要があります。ユニットテストリポジトリのリクエストパラメータの代理人C#、Moq

var rq = new RestBaseRequest{AmendHeaders = x => x.Add("Systerm", "Portal")}; 

var repositoryResponse = await this.restRepository.GetAsync(rq,cancellationToken, loggingContext); 

RestBaseRequestクラスは、私はRestBaseRequestにはパブリックプロパティが存在しないので、私はチェックを行うことができませんでし

[Test] 
     public async Task TestRequestHeaderConatainsRequestingSystem() 
     { 
      // Arrange 
      var restRepository = new Mock<IRestRepository<LifeBondResponse>>(); 
      RestBaseRequest requestBase = null; 
      CancellationToken token = new CancellationToken(); 
      LoggingContext context = null; 


restRepository.Setup(x => x.GetAsync(
        It.IsAny<RestBaseRequest>(), 
        It.IsAny<CancellationToken>(), 
        It.IsAny<LoggingContext>())).Callback((RestBaseRequest baseRequest, CancellationToken cancellationToken, LoggingContext loggingContext) => 
        { 
         requestBase = baseRequest; 
         token = cancellationToken; 
         context = loggingContext; 
        }) 
       .ReturnsAsync(new Service<LifeBondResponse> 
       { 
        Status = GeneralResponseType.Success, 
       }); 

var request = new CustomerRequest<InvestmentBondPolicy> 
      { 
       TypeOfRequest = CustomerRetrieveType.Number, 
       Id = "12345", 
       Data = new Policy() 
       { 
        PolicyNumber = "123456", 
       } 
      }; 

      var repository = new BondRepository(this.authoriseService.Object, restRepository.Object); 
      var rs = await repository.GetPolicyAsync(request, new CancellationToken()); 

} 

以下のような方法を試してみました

public class RestBaseRequest 
     { 
      public RestBaseRequest(); 

      public Action<HttpRequestHeaders> AmendHeaders { get; set; } 
     } 

以下のようになります。さらにこれをテストする方法はありますか? GetAsyncが要求

  • この具体的な要求はPortal最初に
  • Systemに追加することを確認し、別の1にコールバックを呼び出していることをチェック

    • 1:

    答えて

    0

    は、私は2つのテストを提案します1つは虚偽のリクエストをリポジトリに渡し、2番目のリクエストでは、コールバックを嘲笑してHttpRequestHeadersと呼んでいます。

    第二の試験は、次のようになります。

    var headers = new HttpRequestHeaders(); 
    requestToTest.AmendHeaders(headers); 
    Assert.That(headers["System"], Is.EqualTo("Portal")); 
    

    本文:

    public void MethodToTest(IRepository repository) 
    { 
        var rq = new RestBaseRequest{AmendHeaders = x => x.Add("Systerm", "Portal")}; 
        var repositoryResponse = await repository.GetAsync(rq,cancellationToken, loggingContext); 
    } 
    
    public void TheTest() 
    { 
        repositoryMock.Setup(x => x.GetAsync(...)).Callback((x,y,z) => 
        { 
         var headers = new HttpRequestHeaders(); 
         x.AmendHeaders(headers); 
         Assert.That(headers["System"], Is.EqualTo("Portal")); 
        }); 
        _subjectUnderTest.MethodToTest(repositoryMock.Object); 
    } 
    
    +0

    ユニットテストGetAsyncで問題ありません、私は提案を必要としませんリクエストをテストしています。私はすでにGetAsyncをテストするためのテストを別にしています。 – user3910075

    +0

    リクエストは本当に多くありません。そのコールバックを呼び出して、期待どおりに 'HttpRequestHeaders'を変更するかどうか確認してください。 – Haukinger

    +0

    私が言及したように、HttpRequestHeadersを確認するためにRestBaseRequestクラスに公開されているパブリックプロパティはありません – user3910075

    1

    私は自分自身をそれを得た、

    [Test] 
        public async Task TestRequestHeaderConatainsRequestingSystem() 
        { 
         // Arrange 
         var restRepository = new Mock<IRestRepository<LifeBondResponse>>(); 
         var client = new HttpClient(); 
         restRepository 
           .Setup(
            x => x.GetAsync(
             It.IsAny<RestBaseRequest>(), 
             It.IsAny<CancellationToken>(), 
             It.IsAny<ILoggingContext>())) 
           .Callback((RestBaseRequest serviceRequest, 
             CancellationToken cancellationToken, 
             ILoggingContext loggingContext) => 
             { 
              serviceRequest.AmendHeaders(client.DefaultRequestHeaders); 
             }).ReturnsAsync(new Service<LifeBondResponse> { Status = GeneralResponseType.Success, }); 
         var request = new CustomerRequest<Policy> 
         { 
          TypeOfRequest = CustomerRetrieveType.PolicyNumber, 
          Id = "12345", 
          Data = new Policy() 
          { 
           PolicyNumber = "123456", 
               } 
         }; 
         var repository = new LifeBondRepository(this.authoriseService.Object, restRepository.Object); 
    
         // Act 
         await repository.GetPolicyAsync(request, new CancellationToken()); 
    
         // Assert 
         client.DefaultRequestHeaders.Should().NotBeNull(); 
         client.DefaultRequestHeaders.Any(x => x.Key == "System").Should().Be(true); 
         client.DefaultRequestHeaders.GetValues("System").First().Should().Be("Portal"); 
        }