আমি বেশ কয়েকটি দেখেছি কোডে আইওসি পাত্রে ব্যবহার করার পরামর্শ দিই। প্রেরণা সহজ। নিম্নলিখিত নির্ভরতা ইনজেকশন কোড নিন:
class UnitUnderTest
{
std::auto_ptr<Dependency> d_;
public:
UnitUnderTest(
std::auto_ptr<Dependency> d = std::auto_ptr<Dependency>(new ConcreteDependency)
) : d_(d)
{
}
};
TEST(UnitUnderTest, Example)
{
std::auto_ptr<Dependency> dep(new MockDependency);
UnitUnderTest uut(dep);
//Test here
}
মধ্যে:
class UnitUnderTest
{
std::auto_ptr<Dependency> d_;
public:
UnitUnderTest()
{
d_.reset(static_cast<Dependency *>(IocContainer::Get("Dependency")));
}
};
TEST(UnitUnderTest, Example)
{
UnitUnderTest uut;
//Test here
}
//Config for IOC container normally
<Dependency>ConcreteDependency</Dependency>
//Config for IOC container for testing
<Dependency>MockDependency</Dependency>
(উপরেরটি অনুমানের সি ++ অবশ্যই উদাহরণ)
যদিও আমি একমত যে এটি নির্ভরতা নির্মাতা প্যারামিটারটি সরিয়ে ক্লাসের ইন্টারফেসকে সহজতর করে, আমি মনে করি বেশ কয়েকটি কারণে রোগ নিরাময়ের চেয়ে নিরাময় আরও খারাপ। প্রথমত, এবং এটি আমার জন্য বড় একটি, এটি আপনার প্রোগ্রামকে একটি বাহ্যিক কনফিগারেশন ফাইলের উপর নির্ভর করে। আপনার যদি একক বাইনারি স্থাপনার প্রয়োজন হয় তবে আপনি কেবল এই ধরণের পাত্রে ব্যবহার করতে পারবেন না। দ্বিতীয় সমস্যাটি হ'ল এপিআই এখন দুর্বল এবং খারাপ, স্ট্রাইভ টাইপ করা। প্রমাণ (এই কাল্পনিক উদাহরণে) আইওসি ধারকটির স্ট্রিং আর্গুমেন্ট এবং ফলাফলের মধ্যে the
সুতরাং .. এই ধরণের পাত্রে ব্যবহার করার অন্যান্য সুবিধা আছে বা আমি কেবল পাত্রে সুপারিশকারীদের সাথে একমত নই?