আমি নিজেকে টিডিডি পদ্ধতির ব্যবহার করতে শেখাতে চেয়েছিলাম এবং আমার একটি প্রকল্প ছিল যা আমি কিছু সময়ের জন্য কাজ করতে চাইছিলাম। এটি কোনও বৃহত প্রকল্প নয় তাই আমি ভেবেছিলাম এটি টিডির পক্ষে ভাল প্রার্থী হবে। তবে আমার মনে হচ্ছে কিছু খারাপ হয়ে গেছে। আমাকে একটি উদাহরণ দিতে দাও:
উচ্চ স্তরে আমার প্রকল্পটি মাইক্রোসফ্ট ওয়ান নোটের জন্য একটি অ্যাড-ইন যা আমাকে আরও সহজে প্রকল্পগুলি ট্র্যাক এবং পরিচালনা করতে দেয়। এখন, আমি এটির জন্য ব্যবসার যুক্তিটি ওয়ানোট থেকে যতটা সম্ভব ডিকম্পল করে রাখতে চেয়েছিলাম, যদি আমি নিজের কাস্টম স্টোরেজ তৈরি করার সিদ্ধান্ত নিয়েছিলাম এবং কোনও দিন ফিরে এসেছি।
প্রথমে আমি আমার প্রথম বৈশিষ্ট্যটি কী করতে চেয়েছিলাম তা রূপরেখার জন্য একটি মৌলিক সরল শব্দ গ্রহণযোগ্যতা পরীক্ষা দিয়ে শুরু করেছি। এটি দেখতে এমন কিছু দেখাচ্ছে (ব্রেভিটির জন্য এটি নিস্তেজ করে):
- ব্যবহারকারী ক্লিকগুলি প্রকল্প তৈরি করে
- প্রকল্পের শিরোনামে ব্যবহারকারী প্রকারগুলি
- প্রকল্পটি সঠিকভাবে তৈরি হয়েছে তা যাচাই করুন
ইউআই স্টাফ এবং কিছু মধ্যস্থতাকারী পরিকল্পনা বাদ দিয়ে আমি আমার প্রথম ইউনিট পরীক্ষায় আসি:
[TestMethod]
public void CreateProject_BasicParameters_ProjectIsValid()
{
var testController = new Controller();
Project newProject = testController(A.Dummy<String>());
Assert.IsNotNull(newProject);
}
এ পর্যন্ত সব ঠিকই. লাল, সবুজ, রিফ্যাক্টর ইত্যাদি ঠিক আছে এখন এটি আসলে সংরক্ষণের জিনিসগুলির প্রয়োজন। কিছু পদক্ষেপ এখানে কাটছি আমি এটি দিয়ে শেষ।
[TestMethod]
public void CreateProject_BasicParameters_ProjectMatchesExpected()
{
var fakeDataStore = A.Fake<IDataStore>();
var testController = new Controller(fakeDataStore);
String expectedTitle = fixture.Create<String>("Title");
Project newProject = testController(expectedTitle);
Assert.AreEqual(expectedTitle, newProject.Title);
}
আমি এখনও এই মুহুর্তে ভাল বোধ করছি। আমার কাছে এখনও কোনও কংক্রিটের ডেটা স্টোর নেই, তবে আমি ইন্টারফেসটি তৈরি করেছিলাম যা আমি অনুমান করেছিলাম এটি কেমন হবে।
আমি এখানে কয়েকটি পদক্ষেপ এড়াতে যাচ্ছি কারণ এই পোস্টটি যথেষ্ট দীর্ঘ পাচ্ছে, তবে আমি অনুরূপ প্রক্রিয়াগুলি অনুসরণ করেছি এবং শেষ পর্যন্ত আমি আমার ডেটা স্টোরের জন্য এই পরীক্ষায় পৌঁছাচ্ছি:
[TestMethod]
public void SaveNewProject_BasicParameters_RequestsNewPage()
{
/* snip init code */
testDataStore.SaveNewProject(A.Dummy<IProject>());
A.CallTo(() => oneNoteInterop.SavePage()).MustHaveHappened();
}
আমি এটি প্রয়োগের চেষ্টা না করা পর্যন্ত এটি ভাল ছিল:
public String SaveNewProject(IProject project)
{
Page projectPage = oneNoteInterop.CreatePage(...);
}
এবং সেখানে সমস্যাটি হ'ল "..." যেখানে রয়েছে। আমি এখনই বুঝতে পারি যে ক্রিয়েটপেজের জন্য একটি বিভাগ আইডি দরকার। আমি কখনই কন্ট্রোলার পর্যায়ে ভাবছিলাম তা বুঝতে পারি নি কারণ আমি কেবলমাত্র নিয়ামকের সাথে সম্পর্কিত বিট পরীক্ষার সাথেই উদ্বিগ্ন ছিলাম। যাইহোক, এখানে সমস্ত ভাবেই আমি এখন বুঝতে পারি যে প্রকল্পটি সঞ্চয় করার জন্য আমাকে ব্যবহারকারীকে একটি অবস্থান জিজ্ঞাসা করতে হবে। এখন আমাকে ডেটাস্টোরের সাথে একটি লোকেশন আইডি যুক্ত করতে হবে, তারপরে একটি প্রকল্পে যুক্ত করতে হবে, তারপরে একটিটিকে কন্ট্রোলারের সাথে যুক্ত করতে হবে এবং এটি সমস্ত কিছুর জন্য ইতিমধ্যে লেখা সমস্ত পরীক্ষায় এটি যুক্ত করতে হবে। এটি খুব ক্লান্তিকর হয়ে উঠেছে এবং আমি সাহায্য করতে পারছি না তবে মনে হচ্ছে টিডিডি প্রক্রিয়া চলাকালীন সময় ডিজাইনের নকশা না করে আগে নকশাটি স্কেচ করে ফেললে আমি এই দ্রুতই ধরতে পারতাম।
কেউ যদি আমাকে এই প্রক্রিয়াতে কিছু ভুল করে থাকে তবে দয়া করে আমাকে ব্যাখ্যা করতে পারেন? যাইহোক এই ধরণের রিফ্যাক্টরিং এড়ানো যায়? নাকি এটা সাধারণ? যদি এটি সাধারণ হয় তবে এটিকে আরও বেদাহীন করার কোনও উপায় আছে কি?
সবাইকে ধন্যবাদ!