আমি একটি পার্সার লিখছি এবং এর অংশ হিসাবে আমার একটি Expander
ক্লাস রয়েছে যা একক জটিল বক্তব্যকে একাধিক সাধারণ বিবৃতিতে "প্রসারিত" করে। উদাহরণস্বরূপ, এটি এটি প্রসারিত করবে:
x = 2 + 3 * a
মধ্যে:
tmp1 = 3 * a
x = 2 + tmp1
এখন আমি এই ক্লাসটি কীভাবে পরীক্ষা করব, বিশেষত কীভাবে পরীক্ষাগুলি সাজানোর পদ্ধতি নিয়ে চিন্তা করছি thinking আমি ম্যানুয়ালি ইনপুট সিনট্যাক্স ট্রি তৈরি করতে পারি:
var input = new AssignStatement(
new Variable("x"),
new BinaryExpression(
new Constant(2),
BinaryOperator.Plus,
new BinaryExpression(new Constant(3), BinaryOperator.Multiply, new Variable("a"))));
অথবা আমি এটি একটি স্ট্রিং হিসাবে লিখতে এবং এটি পার্স করতে পারে:
var input = new Parser().ParseStatement("x = 2 + 3 * a");
দ্বিতীয় বিকল্পটি অনেক সহজ, খাটো এবং পঠনযোগ্য। তবে এটি একটি অস্বীকৃতিও প্রবর্তন করে Parser
যার অর্থ একটি বাগ Parser
এই পরীক্ষায় ব্যর্থ হতে পারে। সুতরাং, পরীক্ষা একটি ইউনিট পরীক্ষা হওয়া বন্ধ হবে Expander
, এবং আমি টেকনিক্যালি একজন ইন্টিগ্রেশন পরীক্ষা হয়ে অনুমান Parser
এবং Expander
।
আমার প্রশ্ন হ'ল: এই Expander
শ্রেণীর পরীক্ষা করার জন্য এই ধরণের ইন্টিগ্রেশন পরীক্ষার উপর বেশিরভাগ (বা সম্পূর্ণ) নির্ভর করা কি ঠিক আছে ?
Parser
যদি আপনি অভ্যাসগতভাবে কেবল শূন্য ব্যর্থতায় প্রতিশ্রুতিবদ্ধ হন তবে কোনও বাগ পরীক্ষামূলকভাবে অন্য কোনও পরীক্ষায় ব্যর্থ হতে পারে এটির বিপরীতে এর অর্থ হ'ল আপনার আরও কভারেজ রয়েছেParser
। আমি বরং উদ্বেগের বিষয়টি হ'ল এটি হ'ল যে কোনও বাগ এParser
পরীক্ষাটি সফল করতে পারে যখন এটি ব্যর্থ হওয়া উচিত ছিল । ইউনিট টেস্টগুলি বাগগুলি সন্ধানের জন্য রয়েছে all সর্বোপরি - একটি পরীক্ষা ভাঙ্গা হয় যখন তা না করা উচিত।