পরিবেশের বিকাশ: জিএনইউ জিসিসি (জি ++) ৪.১.২
আমি ইউনিট পরীক্ষায় কীভাবে 'কোড কভারেজ - বিশেষত ফাংশন কভারেজ' বাড়ানোর জন্য তদন্ত করার চেষ্টা করছি, আমি খুঁজে পেয়েছি যে কিছু ক্লাস ডর্টর একাধিকবার উত্পন্ন হয়েছে বলে মনে হচ্ছে। আপনার কারও কারও কেন ধারণা আছে, দয়া করে?
আমি নিম্নলিখিত কোডটি ব্যবহার করে উপরে বর্ণিত যা চেষ্টা করেছি এবং পর্যবেক্ষণ করেছি।
"Test.h" এ
class BaseClass
{
public:
~BaseClass();
void someMethod();
};
class DerivedClass : public BaseClass
{
public:
virtual ~DerivedClass();
virtual void someMethod();
};
"Test.cpp" এ
#include <iostream>
#include "test.h"
BaseClass::~BaseClass()
{
std::cout << "BaseClass dtor invoked" << std::endl;
}
void BaseClass::someMethod()
{
std::cout << "Base class method" << std::endl;
}
DerivedClass::~DerivedClass()
{
std::cout << "DerivedClass dtor invoked" << std::endl;
}
void DerivedClass::someMethod()
{
std::cout << "Derived class method" << std::endl;
}
int main()
{
BaseClass* b_ptr = new BaseClass;
b_ptr->someMethod();
delete b_ptr;
}
আমি যখন উপরের কোডটি তৈরি করেছি (g ++ test.cpp -o পরীক্ষা) এবং তারপরে দেখি কী ধরণের চিহ্নগুলি নীচে তৈরি করা হয়েছে,
এনএম --demangle পরীক্ষা
আমি নিম্নলিখিত আউটপুট দেখতে পারে।
==== following is partial output ====
08048816 T DerivedClass::someMethod()
08048922 T DerivedClass::~DerivedClass()
080489aa T DerivedClass::~DerivedClass()
08048a32 T DerivedClass::~DerivedClass()
08048842 T BaseClass::someMethod()
0804886e T BaseClass::~BaseClass()
080488f6 T BaseClass::~BaseClass()
আমার প্রশ্নগুলি নিম্নরূপ।
1) কেন একাধিক ডিটার তৈরি করা হয়েছে (বেসক্লাস - 2, ডেরিভডক্লাস - 3)?
2) এই ডেক্টর মধ্যে পার্থক্য কি? কীভাবে এই একাধিক ডিটারগুলি বেছে বেছে ব্যবহার করা হবে?
আমার এখন অনুভূতি আছে যে সি ++ প্রকল্পের জন্য 100% ফাংশন কভারেজ অর্জন করার জন্য আমাদের এটি বুঝতে হবে যাতে আমি আমার ইউনিট পরীক্ষায় এই সমস্ত ডাক্তারকে অনুরোধ করতে পারি।
উপরের কেউ যদি আমাকে উত্তর দিতে পারে তবে আমি আন্তরিকভাবে প্রশংসা করব।