চেষ্টা / ব্লক ধরার ব্যতিক্রম ঘটায় এমন ইভেন্টগুলির অনুকরণ কীভাবে?


14

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

যদিও আমি প্রধানত সি # /। নেট / ভিজ্যুয়াল স্টুডিও ব্যবহার করে বিকাশ করি তবে অন্যান্য ভাষার সাথে সম্পর্কিত উত্তর বা সংস্থানগুলি কার্যকর হতে পারে।


আর একটি সম্ভাব্য সমাধান এই এমএসডিএন নিবন্ধে বর্ণিত হয়েছে: টেস্টএপি দিয়ে ফল্ট ইঞ্জেকশন টেস্টিং
জিওরগি

উত্তর:


13

1) আপনি যদি নির্ভরতা ইঞ্জেকশন মডেলটি অনুসরণ করেন তবে আপনি কিছু অংশের বাস্তব প্রয়োগগুলি মকসের সাথে প্রতিস্থাপন করতে পারেন যা আপনার প্রয়োজন হিসাবে ব্যতিক্রম ছুঁড়ে ফেলবে। তবে আপনাকে প্রথমে আপনার অ্যাপ্লিকেশনটি নির্দিষ্ট উপায়ে ডিজাইন করতে বা এটি পুরোপুরি পুনরায় নকশাকারীর প্রয়োজন।

ভালো লেগেছে:

public class SqlUsersRepository : IUsersRepository
{
    public void RegisterNewUser (User newUser)
    {
        throw new SqlException ("Connection timeout");
    }
}

এখানে তবে আমাদের সমস্যা হবে যে ভোক্তা কোডটি কংক্রিট বাস্তবায়ন ব্যতিক্রমগুলি পরিচালনা করার সাথে নিজেকে উদ্বেগ না করে concern

2) অন্য পদ্ধতির আপনার কাস্টম মোড়কের সাথে নির্দিষ্ট পদ্ধতি কলগুলি প্রতিস্থাপন করা।

পরিবর্তে:

FileStream fs = File.OpenRead (path);

তুমি ব্যাবহার কর:

FileStream fs = File.OpenRead_Test (path);

একটি কাস্টম এক্সটেনশন পদ্ধতি সরবরাহ করে (কেবল একটি দ্রুত ধারণা):

public static FileStream OpenRead_Test (this System.IO.File file, string path)
{
    throw new FileNotFoundException ();
}

3

আপনাকে মশকরা ফ্রেমওয়ার্কগুলি দেখতে হবে।

এগুলির মাধ্যমে আপনি আসলটির চেয়ে ভুয়া ডাটাবেস (বলুন) কল করতে নির্ভরতা ইনজেকশন ব্যবহার করেন। এর অর্থ হ'ল প্রতিটি কলের জন্য কী ফিরে আসে তার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে।

তারপরে আপনি একটি পরীক্ষা সেট আপ করেন যা যখন ডাকা হয় তখন কেবল পছন্দসই ব্যতিক্রম ছুঁড়ে দেয়:

public void Test1()
{
    throw new NullArgumentException();
}

যখন আপনার কোড এটিকে সঠিকভাবে পরিচালনা করে তখন আপনার পরীক্ষাটি পাস হয়।


3

উপহাস এবং ইনজেকশন কেবল এ পর্যন্ত আপনাকে পেতে পারে এবং কিছু ক্ষেত্রে পদ্ধতির ক্ষেত্রে বড় পরিবর্তন প্রয়োজন।

আপনি যদি কোনও পরীক্ষার কাঠামোর সাথে মানিয়ে নিতে আপনার অ্যাপ্লিকেশনটিকে আবার ডিজাইন করতে না চান তবে আপনার যা প্রয়োজন তা হ'ল হোস্ট বা পরিবেশের জন্য যা ত্রুটিগুলির জন্য কঠোর। আমাদের আউটেজটি নেটওয়ার্কের মন্থরতা অনুকরণ করার অনেকগুলি উপায় রয়েছে (এমনকি মাইক্রোসফ্ট পরীক্ষার সরঞ্জামগুলির ওয়েব পরীক্ষার ক্ষেত্রে এটির কিছুটা রয়েছে)। আমি একটি রাউটারের পিছনে মেশিন স্থাপনের ক্ষেত্রে সেরা সাফল্য পেয়েছি যা ত্রুটিগুলি তৈরি করতে এবং স্ক্রিপ্টগুলি ডেটাবেস তৈরি করে তার সাথে সমন্বয় করে সিমুলেশন পরিবর্তনের জন্য হস্তক্ষেপ করা যেতে পারে।

এমনকি যদি আপনি হার্ডওয়ারের দিকে দ্রুত বা যথেষ্ট পরিমাণে যান তবে সামঞ্জস্য সমস্যা এবং বিলম্বিত লেখার ব্যর্থতার মতো ত্রুটি রয়েছে যা আপনি খুব বেশি অনুকরণ করতে পারবেন না। কখনও কখনও আপনাকে তাদের আসল এবং অন্যান্য সময়গুলির জন্য ঘটতে হয় আপনাকে কেবল সুরক্ষা জাল ছাড়া কাজ করতে হয়।


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