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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何模擬由 Visual Studio 自動(dòng)生成的 SOAP 客戶端?

如何模擬由 Visual Studio 自動(dòng)生成的 SOAP 客戶端?

C#
繁星點(diǎn)點(diǎn)滴滴 2023-07-22 18:28:11
我有一個(gè)自動(dòng)生成的 SOAP 客戶端。它是由 Visual Studio 向?qū)傻模ㄌ砑舆B接的服務(wù) -> Microsoft WCF Web 服務(wù)參考提供程序)。我想模擬該客戶端,因此當(dāng)調(diào)用方法時(shí),將以 SOAP 響應(yīng)的格式返回預(yù)定義的結(jié)果。不幸的是,我無法讓它工作 - 我的結(jié)果要么為空(而不是在 .Returns 中定義),要么得到異常。我正在嘗試在我的設(shè)計(jì)中應(yīng)用干凈的架構(gòu)。因此,這個(gè) SOAP 客戶端進(jìn)入了我的基礎(chǔ)設(shè)施層,我在其中為其創(chuàng)建了一個(gè)存儲(chǔ)庫。該存儲(chǔ)庫創(chuàng)建 DTO,因此可以將它們分派到我的持久性中。存儲(chǔ)庫通過依賴項(xiàng)注入接收 SOAP 客戶端。我還想對(duì)存儲(chǔ)庫進(jìn)行測試,只是為了驗(yàn)證 DTO 生成是否正確。因此,我想模擬這個(gè) SOAP 服務(wù),這樣我就可以將其提供給存儲(chǔ)庫并測試返回的 DTO。自動(dòng)生成的界面:    public interface ApplicationSoap    {        [System.ServiceModel.OperationContractAttribute(Action = "http://Application/GetAppVersion", ReplyAction = "*")]        Task<ExtApp.GetAppVersionResponse> GetAppVersionAsync(ExtApp.GetAppVersionRequest request);    }和自動(dòng)生成的客戶端類:    [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);        }    }它運(yùn)行,但調(diào)用的結(jié)果是null。我期望返回一個(gè)具有非空Body屬性且內(nèi)部有數(shù)組的對(duì)象。我正在尋求如何使這件事發(fā)揮作用的建議。
查看完整描述

1 回答

?
嗶嗶one

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊

您的 SOAP 客戶端合同是:


public interface ApplicationSoap

{

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

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

}

您可以將其用作存儲(chǔ)庫中的依賴項(xiàng),如下所示:


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

        };

    }

}

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


[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);

}

然而......僅僅因?yàn)槟梢赃@樣做并不意味著您應(yīng)該這樣做。


查看完整回答
反對(duì) 回復(fù) 2023-07-22
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)