আমি একটি সেবার জন্য একটি পদ্ধতি যা ওয়েব করে তোলে তা পরীক্ষা করছি API কল করে তা পরীক্ষা করছি। HttpClientআমি যদি স্থানীয়ভাবে ওয়েব সার্ভিস (সমাধানে অন্য কোনও প্রকল্পে অবস্থিত) চালাই তবে ইউনিট পরীক্ষার জন্য একটি সাধারণ কাজ করে ।
তবে আমি যখন আমার পরিবর্তনগুলি যাচাই করি তখন বিল্ড সার্ভারটির ওয়েব পরিষেবায় অ্যাক্সেস থাকবে না তাই পরীক্ষাগুলি ব্যর্থ হবে।
আমি আমার ইউনিট পরীক্ষার জন্য একটি IHttpClientইন্টারফেস তৈরি করে এবং আমার অ্যাপ্লিকেশনটিতে আমি ব্যবহার করি এমন একটি সংস্করণ প্রয়োগ করে এটির জন্য একটি উপায় তৈরি করেছি । ইউনিট পরীক্ষাগুলির জন্য, আমি একটি বিদ্রূপযুক্ত অ্যাসিঙ্ক্রোনাস পোস্ট পদ্ধতিটি সহ একটি উপহাস সংস্করণ তৈরি করি। এখানেই আমি সমস্যার মধ্যে পড়েছি। আমি HttpStatusResultএই বিশেষ পরীক্ষার জন্য একটি ঠিক ফিরিয়ে দিতে চাই । অন্য অনুরূপ পরীক্ষার জন্য আমি একটি খারাপ ফলাফল ফিরে আসব।
পরীক্ষা চলবে তবে কখনই শেষ হবে না। এটি অপেক্ষা করে। আমি অ্যাসিক্রোনাস প্রোগ্রামিং, ডেলিগেটস এবং নিজেই মোকের কাছে নতুন এবং আমি নতুন জিনিস শিখার জন্য কিছু সময়ের জন্য এসও এবং গুগল অনুসন্ধান করেছিলাম তবে এখনও আমি এই সমস্যাটি পেরেছি বলে মনে হয় না।
এখানে আমি যে পদ্ধতিটি পরীক্ষা করার চেষ্টা করছি তা এখানে:
public async Task<bool> QueueNotificationAsync(IHttpClient client, Email email)
{
// do stuff
try
{
// The test hangs here, never returning
HttpResponseMessage response = await client.PostAsync(uri, content);
// more logic here
}
// more stuff
}
এখানে আমার ইউনিট পরীক্ষা পদ্ধতি:
[TestMethod]
public async Task QueueNotificationAsync_Completes_With_ValidEmail()
{
Email email = new Email()
{
FromAddress = "bob@example.com",
ToAddress = "bill@example.com",
CCAddress = "brian@example.com",
BCCAddress = "ben@example.com",
Subject = "Hello",
Body = "Hello World."
};
var mockClient = new Mock<IHttpClient>();
mockClient.Setup(c => c.PostAsync(
It.IsAny<Uri>(),
It.IsAny<HttpContent>()
)).Returns(() => new Task<HttpResponseMessage>(() => new HttpResponseMessage(System.Net.HttpStatusCode.OK)));
bool result = await _notificationRequestService.QueueNotificationAsync(mockClient.Object, email);
Assert.IsTrue(result, "Queue failed.");
}
আমি কি ভুল করছি?
আপনার সাহায্যের জন্য ধন্যবাদ।