একটি নেট নেট এমভিসি নিয়ামক ইউনিট পরীক্ষার জন্য মট এইচটিটিপি কনটেক্সট?


103

আমার একটি নিয়ামকের একটি ফাংশন রয়েছে যে আমি ইউনিট টেস্টিং যা http অনুরোধের শিরোনামে মানগুলি প্রত্যাশা করে। আমি এইচটিটিপি কনটেক্সটটি আরম্ভ করতে পারি না কারণ এটি কেবল পঠনযোগ্য।

আমার নিয়ামক ক্রিয়াকলাপটি "ডিভাইস-আইডি" এর জন্য একটি http অনুরোধ শিরোনামের মান আশা করে

[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();

    //not valid controller.HttpContext is readonly
    //controller.HttpContext = new DefaultHttpContext(); 

    var result = controller.Get();
    Assert.AreEqual(result.Count(), 2);
}

তৃতীয় পক্ষের লাইব্রেরি ব্যবহার না করে এটি করার জন্য কি কোনও সোজা-সামনের উপায় আছে?


4
এইচটিটিপি কনটেক্সট ব্যবহার করবেন না ? কন্ট্রোলার ব্যবহারের সম্পূর্ণ পয়েন্টটি হ'ল নিয়ন্ত্রকের পরামিতিগুলির মাধ্যমে ডেটা আসে। যদি আপনার কন্ট্রোলার ডেটা পড়ার জন্য এইচটিটিপি কনটেক্সট ব্যবহার করে তবে এটি কোনও ওয়েবফোর্ড পৃষ্ঠা, আপনার একটি সমস্যা আছে।
পানাজিওটিস কানভোস

@ পানাগিওটিসকানাভোস শিরোনামের মানটি এমন একটি তথ্যের অংশ যা ইঙ্গিত করে যে কোন মোবাইল ডিভাইসটি কলটি এসেছে। সঠিক তথ্য পুনরুদ্ধার করার জন্য এটি নেসেসারি। ডিভাইস আইডি শিরোনামে রয়েছে কারণ প্রমাণীকরণের জন্য আইডি প্রয়োজন, যা কাস্টম অ্যাকশন ফিল্টার দ্বারা পরিচালিত হয়। আমি একটি রুট প্যারামিটার হিসাবে ডিভাইস আইডি পাস করতে পারতাম তবে এটি
অনর্থক

হাইডারঅ্যাট্রিবিউট থেকে চেক করুন তবে নকলটিও দেখুন। এইচটিটিপি কনটেক্সট এখন কনফিগারেশনের মাধ্যমে
ইনজেকশনযোগ্য

4
আপনি ঠিক কী চান তা নির্দিষ্ট করতে আপনার প্রশ্নের সম্পাদনা করার পরামর্শ দিচ্ছি (মোবাইল ডিভাইসগুলি শনাক্ত করতে শিরোনামের ক্ষেত্রগুলিতে অ্যাক্সেস)। এএসপি.এনইটি ডকুমেন্টেশন মনে হচ্ছে ডকুমেন্টেশন পৃষ্ঠাগুলি নিখোঁজ হওয়ার সাথে দয়া করে এটি .... "রূপান্তর" সময়কালের মধ্য দিয়ে চলেছে। পরীক্ষা করে দেখুন এই প্রায় অনুরূপ প্রশ্ন যে কিভাবে রুট মোবাইল ডিভাইসে জিজ্ঞেস
Panagiotis Kanavos

উত্তর:


237

আমি এইভাবে httpcontext এবং শিরোলেখ শুরু করতে সক্ষম হয়েছি:

[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();
    controller.ControllerContext = new ControllerContext();
    controller.ControllerContext.HttpContext = new DefaultHttpContext();
    controller.ControllerContext.HttpContext.Request.Headers["device-id"] = "20317";
    var result = controller.Get();
    //the controller correctly receives the http header key value pair device-id:20317
    ...
}

20

এইচটিটিপি কনটেক্সটকে উপহাস করার পরিবর্তে, পদ্ধতিটিতে একটি প্যারামিটারে শিরোনামটি মানচিত্র করা আরও ভাল ধারণা। উদাহরণস্বরূপ, এই উত্তরের নীচে কন্ট্রোলারে, idপ্যারামিটারটি "ডিভাইস-আইডি" এর সমান নামের সাথে মান শিরোনামে সেট করা হয় ... ইউনিট পরীক্ষার পরে পরিণত হয়

[TestMethod]
public void TestValuesController()
{
    ValuesController controller = new ValuesController();
    var result = controller.GetHeaderValue("27");
    Assert.AreEqual(result, "27");
}

আপনি যখন এইচটিটিপি কনটেক্সটকে উপহাস করতে পারেন তবে আমার মতে এটি এমন একটি বিষয় যা আপনার কাছে কোনও পছন্দ না থাকলে এড়ানো উচিত। ফ্রিহাইডারঅ্যাট্রিবিউটের ডকুমেন্টেশনগুলি এখানে হেইডারঅ্যাট্রিবিউট ক্লাস থেকে পাওয়া যাবে ।

public class ValuesController: Controller
{
    public string GetHeaderValue([FromHeader(Name = "device-id")] string id)
    {
        return id;
    }
}

4
আমার ক্ষেত্রে, আইআইআরসি, এটিতে এইচটিপি শিরোনাম অন্তর্ভুক্ত করা দরকার ছিল কারণ একটি নেট নেট মিডলওয়্যার উপাদানগুলিতে একই মানটি মূল্যায়ন করা দরকার ছিল
জেমস ওয়েয়ারজবা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.