第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何模擬由 Visual Studio 自動生成的 SOAP 客戶端?

如何模擬由 Visual Studio 自動生成的 SOAP 客戶端?

C#
繁星點點滴滴 2023-07-22 18:28:11
我有一個自動生成的 SOAP 客戶端。它是由 Visual Studio 向導生成的(添加連接的服務 -> Microsoft WCF Web 服務參考提供程序)。我想模擬該客戶端,因此當調用方法時,將以 SOAP 響應的格式返回預定義的結果。不幸的是,我無法讓它工作 - 我的結果要么為空(而不是在 .Returns 中定義),要么得到異常。我正在嘗試在我的設計中應用干凈的架構。因此,這個 SOAP 客戶端進入了我的基礎設施層,我在其中為其創(chuàng)建了一個存儲庫。該存儲庫創(chuàng)建 DTO,因此可以將它們分派到我的持久性中。存儲庫通過依賴項注入接收 SOAP 客戶端。我還想對存儲庫進行測試,只是為了驗證 DTO 生成是否正確。因此,我想模擬這個 SOAP 服務,這樣我就可以將其提供給存儲庫并測試返回的 DTO。自動生成的界面:    public interface ApplicationSoap    {        [System.ServiceModel.OperationContractAttribute(Action = "http://Application/GetAppVersion", ReplyAction = "*")]        Task<ExtApp.GetAppVersionResponse> GetAppVersionAsync(ExtApp.GetAppVersionRequest request);    }和自動生成的客戶端類:    [System.Diagnostics.DebuggerStepThroughAttribute()]    [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.1-preview-30514-0828")]    public partial class ApplicationSoapClient : System.ServiceModel.ClientBase<ExtApp.ApplicationSoap>, ExtApp.ApplicationSoap    {        static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials);        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]        System.Threading.Tasks.Task<ExtApp.GetAppVersionResponse> ExtApp.ApplicationSoap.GetAppVersionAsync(ExtApp.GetAppVersionRequest request)        {            return base.Channel.GetAppVersionAsync(request);        }        public System.Threading.Tasks.Task<ExtApp.GetAppVersionResponse> GetAppVersionAsync(int appVer)        {            ExtApp.GetAppVersionRequest inValue = new ExtApp.GetAppVersionRequest();            inValue.Body = new ExtApp.GetAppVersionRequestBody();            inValue.Body.appVer = appVer;            return ((ExtApp.ApplicationSoap)(this)).GetAppVersionAsync(inValue);        }    }它運行,但調用的結果是null。我期望返回一個具有非空Body屬性且內部有數組的對象。我正在尋求如何使這件事發(fā)揮作用的建議。
查看完整描述

1 回答

?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

您的 SOAP 客戶端合同是:


public interface ApplicationSoap

{

    [System.ServiceModel.OperationContractAttribute(Action = "http://Application/GetAppVersion", ReplyAction = "*")]

    Task<ExtApp.GetAppVersionResponse> GetAppVersionAsync(ExtApp.GetAppVersionRequest request);

}

您可以將其用作存儲庫中的依賴項,如下所示:


public class Repository

{

    private readonly IApplicationSoap _client;


    public Repository(IApplicationSoap client) { _client = client; }


    public async Task<AppVersion> GetAppVersionAsync(int version)

    {

        var request = new GetAppVersionRequest(new GetAppVersionRequestBody(version));

        var response = await _client.GetAppVersionAsync(request);

        return new AppVersion 

        {

            Version = response.Body.Version,

            StartDate = response.Body.StartDate,

            EndDate = response.Body.EndDate

        };

    }

}

在這種情況下,您可能需要測試將輸入轉換為請求的代碼以及將響應轉換為 DTO 的代碼。這是您唯一的代碼(而不是由工具生成)。為此,您需要在存儲庫測試中模擬(實際上是存根)SOAP 客戶端合約,并讓它返回您想要的響應:


[Fact]

public async Task GetAppVersionAsync()

{

    // arrange

    var client = new Mock<IApplicationSoap>(); // mock the interface, not the class!

    var result = new AppVersion

    { 

        Version = 1, 

        StartDate = DateTime.Parse("2010-01-01"),

        EndDate = DateTime.Parse("2015-12-31")

    };

    client.Setup(x => x.GetAppVersionAsync(It.IsAny<GetAppVersionRequest>))

          .Returns(Task.FromResult(new GetAppVersionResponse(new GetAppVersionResponseBody(result))));

    var repository = new Repository(soapApp);


    // act

    var dto = await repository.GetAppVersionAsync(1);


    // assert (verify the DTO state)

    Assert.Equal(1, dto.VersionNumber);

    Assert.Equal(new DateTime(2010, 1, 1), dto.StartDate);

    Assert.Equal(new DateTime(2015, 12, 31), dto.EndDate);

}

然而......僅僅因為您可以這樣做并不意味著您應該這樣做。


查看完整回答
反對 回復 2023-07-22
  • 1 回答
  • 0 關注
  • 145 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號