বেশিরভাগ ডাটাবেস সিআরইউডি অপারেশনে নির্ভর করে এমন একটি অ্যাপ্লিকেশন পরীক্ষা করতে আমি কীভাবে ইউনিট পরীক্ষা এবং টিডিডি ব্যবহার করতে পারি?


22

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

আমাদের বাগের বেশিরভাগ অংশে একরকম বা অন্য কোনওভাবে জেপিএ জড়িত।

  • উদাহরণ 1: আপনি যদি দুটি বার সেভ বোতামটি ক্লিক করেন তবে জেপিএ দ্বিতীয় বার একই অস্তিত্বটি ডাটাবেসে toোকানোর চেষ্টা করতে পারে, যার ফলে প্রাথমিক কী লঙ্ঘন হয়।
  • উদাহরণ 2: আপনি ডাটাবেস থেকে একটি সত্তা পুনরুদ্ধার করুন, এটি সম্পাদনা করুন এবং এর ডেটা আপডেট করার চেষ্টা করুন। জেপিএ পুরানোটিকে আপডেট করার পরিবর্তে একটি নতুন উদাহরণ তৈরি করার চেষ্টা করতে পারে।

প্রায়শই সমাধানটির জন্য জেপিএ টিকা যুক্ত / অপসারণ / পরিবর্তন করা প্রয়োজন। অন্যান্য সময়ে এটি ডিএও যুক্তি সংশোধন করে।

ইউনিট টেস্ট এবং টিডিডি ব্যবহার করে কীভাবে আমাদের কোডে আস্থা অর্জন করবেন তা আমি বুঝতে পারি না। আমি নিশ্চিত নই যে এটি কারণ ইউনিট টেস্ট এবং টিডিডি খারাপ ফিট, বা যদি আমি সমস্যার কাছে পৌঁছাচ্ছি।

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

টিডিডি খারাপ ফিটের মতো বলে মনে হচ্ছে কারণ মোতায়েন করা + পরীক্ষার প্রতিক্রিয়া লুপটি এত ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে পড়ে যায় me মোতায়েন করা + পরীক্ষার প্রতিক্রিয়া লুপটি 3 মিনিটের বেশি সময় নেয় এবং আমি ঠিক কোডটি লিখছি কিনা তা সম্পর্কে আমি বিশেষত টেস্টগুলি চালিত করি। সমস্ত ইন্টিগ্রেশন পরীক্ষা চালাতে 30+ মিনিট সময় লাগে।

এই ছাঁচের বাইরে কোড রয়েছে এবং আমি সর্বদা ইউনিট পরীক্ষা করি যখনই পারি। তবে আমাদের বাগের বেশিরভাগ অংশ এবং সবচেয়ে বড় সময় ডুবে সর্বদা জেপিএ বা ডাটাবেস জড়িত।


অনুরূপ অন্য একটি প্রশ্ন রয়েছে , তবে আমি যদি পরামর্শটি অনুসরণ করি তবে আমি আমার কোডের সবচেয়ে অস্থির অংশটি (জেপিএ) মোড়ানো এবং এটি ছাড়াও সমস্ত কিছুর পরীক্ষা করছি। আমার প্রশ্নের প্রসঙ্গে, আমি একই খারাপ পরিস্থিতিতে থাকি। জেপিএ মোড়ানোর পরের পদক্ষেপটি কী? আইএমও এই প্রশ্নটি (সম্ভবত) আমার প্রশ্নের উত্তর দেওয়ার একটি পদক্ষেপ, তবে এটির কোনও উত্তর নয়।


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

@ র্যান্ডমএ সঠিক, আমি স্পষ্টভাবে এটি বলতে আমার প্রশ্ন সম্পাদনা করেছি। আপনি কেন আমি প্রশ্নটি পরিবর্তন করার প্রস্তাব দিচ্ছি তা আমি বুঝতে পারছি না। তুমি কি বিস্তারিত বলতে পারো? আমি সেখানে ইউনিট পরীক্ষার অংশটি রাখতে চাই কারণ আমি বরং ইন্টিগ্রেশন পরীক্ষার চেয়ে ইউনিট পরীক্ষা লিখছি (যদিও আমি এটি অবগত রয়েছি unit testing != TDD)
ড্যানিয়েল কাপলান

বিশেষ কিছু না হলেও, এখানে টিডিডি রাখুন। যদি আপনার সেখানে ইউনিট-পরীক্ষা হয়, তবে অনেক লোক ভাবেন যে আপনি কিছুই বুঝতে পারেন না, ইত্যাদি .. আপনার পক্ষে ভাল নয় ..
ইনফর্মডএ


উত্তর:


7

একটি বিকল্প হ'ল ইন-মেমরি টেস্টিং ডাটাবেস যেমন H2 ব্যবহার করা ; এটি একটি স্ট্যান্ডার্ড ডিস্ক-ব্যবহার ডাটাবেসের চেয়ে প্রায় 10x দ্রুত এবং নিম্ন প্রারম্ভ / টিয়ারডাউন সময়গুলির সাথে ঝোঁক করে।

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

তবে আপনি যদি পুরো সিস্টেমের সাথে প্রত্যেকের জন্য এইচ 2 দিয়ে 10 রান করতে পারেন তবে তা পরিশোধ হতে পারে।


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

1
আমি মনে করি যে প্রয়োজনীয়তার প্রায়শই উপায় রয়েছে (যেমন ডকস.ওরাকল.মিডলওয়্যার / १२১২ / টপলিংক / টিএলএডজি / টেস্টিংজপা এইচটিএম )। যদিও ন্যায়সঙ্গত হওয়ার চেয়ে বেশি কাজ করার খুব বেশি সম্ভাবনা; অন্য বিকল্পটি হবে কিছু বিফিয়ার টেস্টিং সার্ভার পাওয়া এবং সমান্তরালে জিনিসগুলি চালানো।
সোরু

1
@ টিটিওয়াইটি এইচএসকিএলডিবি ইউনিটের সাথে আমার নিজের ধারণার প্রমাণটি গিথুবে একটি ক্রুড ওয়েব অ্যাপ্লিকেশনটি পরীক্ষা করছে : টেস্টিংউইথএইচসিএলডিবি - ইউনিট পরীক্ষাগুলিতে অ্যাপটি স্থাপন করার দরকার নেই।

3

ডাটাবেসগুলি ইউনিট পরীক্ষার পক্ষে খুব সহজ হতে পারে - আপনার সঞ্চিত পদ্ধতি এবং লেনদেনের প্রয়োজন।

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

আশা করি এটি আপনার কাঠামোর মধ্যে কীভাবে এটি করবেন তা আপনাকে কিছুটা অন্তর্দৃষ্টি দিতে পারে।


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

আমরা আমাদের এসকিউএল-এর জন্য ডিবি ইউনিট পরীক্ষা চালাতাম, তবে তারপরে সেগুলি সমস্তই স্প্রোকে ছিল। সেখানে (হেই, আমরা বিল্ড সার্ভার ছিল সবুজ টিক পেয়েছিলাম যতক্ষণ আপনি পারেন অন্যান্য SQL পদ্ধতি থেকে ইউনিট পরীক্ষা SQL ডিরেক্টরি, আমাদের ইউনিট পরীক্ষা ফ্রেমওয়ার্ক MSTest তাই এটা জ্ঞান তৈরি তাদের কাছ থেকে চালানোর জন্য সবচেয়ে গুরুত্বপূর্ণ ফ্যাক্টর)। আপনার যদি সর্বদা একটি ডিবি থাকে (এবং আমরা যাইহোক যাইহোক পরীক্ষার জন্য করেছি) তবে সমস্ত বর্ধিত স্কেল কোড আপলোড করা এবং বিল্ড সার্ভারে সমস্ত ইউনিট পরীক্ষা চালানো সহজ। কখনও কখনও আপনাকে কেবল এই বিষয়গুলি সম্পর্কে ব্যবহারিক হতে হবে।
gbjbaanb

আমি মনে করি না আপনি আমার প্রথম বাক্যে সাড়া দিয়েছেন।
ড্যানিয়েল ক্যাপলান

ঠিক আছে, তখন কেবল জেপিএ-ইউনিট ব্যবহার করুন। আপনার জেপিএ কোড কীভাবে কাজ করে (বা না) আমি উত্তর দিতে পারছি না, কেবল আপনাকে ডিবিতে এসকিউএল পরীক্ষা করার বিষয়ে কিছু ধারণা দেওয়ার চেষ্টা করুন।
gbjbaanb

3

অন্যান্য ব্যক্তিরা "আপনার ডিবি মক আউট" দিয়ে উত্তর দিয়েছেন! - তবে আপনার ডিবি স্তরটিকে উপহাস করার মধ্যে কী লাভ যদি আপনার প্রকৃতপক্ষে যদি এটি পরীক্ষা করতে হয় যে এটি আপনার কোডের সাথে কীভাবে ইন্টারেক্ট করে?

আপনি যা সন্ধান করছেন তা হ'ল ইন্টিগ্রেশন টেস্ট এবং / অথবা স্বয়ংক্রিয় ইউআই পরীক্ষা। আপনি উল্লেখ করেছেন যে সমস্যাটি যখন ঘটে:

*If you click the save button twice*

এর পরীক্ষার একমাত্র উপায় হ'ল বোতামে দু'বার ক্লিক করার জন্য একটি স্বয়ংক্রিয় UI পরীক্ষা লেখা। হয়তো সেলেনিয়াম পরীক্ষা করে দেখুন।

আপনার সম্ভবত ডিবি টেস্টিংয়ের একটি ইউনিটের প্রয়োজন হবে এবং আপনার পরীক্ষাগুলির জন্য এটির দিকে এটি নির্দেশ করুন। বাস্তব জগতের টিডিডি বজায় রাখার জন্য একটি ব্যথা welcome


এটি আরো একটি উত্তর চেয়ে গলাবাজি মত সার্চ
মশা

আমি তিনবার প্রশ্নের উত্তর দিয়েছি - ইন্টিগ্রেশন টেস্ট, জিইউআই পরীক্ষা এবং / অথবা একটি ইউনিট টেস্টিং ডিবি। হ্যাঁ এটি কিছুটা কৌতুকপূর্ণ, আমি এখনই এটিকে কিছুটা উদারতার সাথে সম্পাদনা করব।
রক্লান

1
"এটির পরীক্ষার একমাত্র উপায় হ'ল বোতামে দু'বার ক্লিক করার জন্য একটি স্বয়ংক্রিয় ইউআই পরীক্ষা লেখা। সম্ভবত সেলেনিয়াম পরীক্ষা করে দেখুন" " এই জাতীয় পরিস্থিতিতে, ব্যাকএন্ড আরও ভালভাবে এটি হতে বাধা দেয়, অন্যথায় ইউআই এর ডাটাবেসে সরাসরি অ্যাক্সেস থাকতে পারে।
ড্যানিয়েল ক্যাপলান

0

আপনি আপনার প্রশ্নের যে উদাহরণটি দিয়েছেন তাতে উদাহরণস্বরূপ, খুব সহজেই একটি ত্রুটি ঘটানোর জন্য আপনি দুটি বার বোতামটি ক্লিক করার পরিস্থিতিতে পরীক্ষা / টিডিডি ইউনিট করতে পারবেন না। তবে আপনি যা পরীক্ষা করতে পারবেন তা হ'ল কোডটি যা আপনি বোতামটি ক্লিক করার সময় বলা হয়, যদি আপনি অধ্যবসায় স্তর থেকে কোনও ব্যতিক্রম পেয়ে থাকেন তবে আপনি এটি যথাযথভাবে পরিচালনা করেন (স্থির স্তরটি উপহাস করে বা মেমোরি ডাটাবেস হিসাবে ব্যবহার করে) অন্যান্য উত্তরে পরামর্শ দেওয়া হয়েছে) - নতুন করে লেখার মাধ্যমে বা কোনও ত্রুটি প্রদর্শন করে বা যাই হোক না কেন।

আপনি ঠিক বলেছেন যে যখন ইউনিট পরীক্ষার জন্য উপযুক্ত উপযুক্ত নয় (যেমন ইন্টিগ্রেশন / সিস্টেম পরীক্ষা) এমন টেস্টগুলি করা দরকার যখন টিডিডি ভেঙে ফেলা শুরু করতে পারে - এটি সাম্প্রতিক "আলোচনার টিডিডি" তে বেশ আলোচনার সৃষ্টি করেছে মৃত?" কেন্ট বেক, মার্টিন ফোলার এবং ডেভিড হেইনমিয়ার হ্যানসনের মধ্যে বিতর্ক: http://martinfowler.com/articles/is-tdd-dead/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.