আমি সম্প্রতি আমার সি ++ প্রকল্পগুলি সংকলনের জন্য সিএমকে ব্যবহার করে বিক্রি করেছি এবং এখনই আমার কোডের জন্য কিছু ইউনিট পরীক্ষা লেখা শুরু করতে চাই। এটিতে সহায়তা করার জন্য আমি গুগল টেস্টের ইউটিলিটিটি ব্যবহার করার সিদ্ধান্ত নিয়েছি, তবে শুরু করার জন্য কিছু সহায়তা দরকার।
সমস্ত দিন আমি বিভিন্ন গাইড পড়ছি এবং উদাহরণগুলির মধ্যে রয়েছে প্রাইমার , আইবিএমের একটি ভূমিকা এবং এসও সম্পর্কিত কিছু প্রশ্ন ( এখানে এবং এখানে ) পাশাপাশি অন্যান্য উত্সগুলিও আমি হারিয়ে ফেলেছি। আমি বুঝতে পারি যে সেখানে প্রচুর পরিমাণে আছে তবে কোনওরকম আমার এখনও অসুবিধা হচ্ছে।
আমি বর্তমানে সর্বাধিক বেসিক পরীক্ষাটি বাস্তবায়নের চেষ্টা করছি, আমি গেমস্টের ডানটি সঠিকভাবে কম্পাইল / ইনস্টল করেছি এবং এটি কাজ করছে না তা নিশ্চিত করার জন্য। একমাত্র উৎস ফাইল (testgtest.cpp) থেকে প্রায় হুবহু নেওয়া হয় এই পূর্ববর্তী উত্তর:
#include <iostream>
#include "gtest/gtest.h"
TEST(sample_test_case, sample_test)
{
EXPECT_EQ(1, 1);
}
এবং আমার সম্পর্কিত সিএমকেলিস্ট.টেক্সট নিম্নরূপ:
cmake_minimum_required(VERSION 2.6)
project(basic_test)
# Setup testing
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIR})
# Add test cpp file
add_executable(runUnitTests
testgtest.cpp
)
# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})
add_test(
NAME runUnitTests
COMMAND runUnitTests
)
নোট করুন যে আমি সিপিপি ফাইলের শেষে মূল সরবরাহ না করে জিস্টে_মেনের সাথে লিঙ্ক করা বেছে নিয়েছি কারণ আমার বিশ্বাস এটি আমাকে একাধিক ফাইলগুলিতে আরও সহজে টেস্টিং স্কেল করতে দেয়।
উত্পন্ন .sln ফাইল তৈরি করার সময় (ভিজ্যুয়াল সি ++ ২০১০ এক্সপ্রেসে) আমি দুর্ভাগ্যক্রমে ফর্মটির ত্রুটির একটি দীর্ঘ তালিকা পাই
2>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in gtestd.lib(gtest-all.obj)
যা আমি মনে করি তার মানে আমি সফলভাবে গ্রেস্ট লাইব্রেরিতে লিঙ্ক করছি না। আমি নিশ্চিত করেছি যে ডিবাগ লাইব্রেরিগুলির সাথে লিঙ্ক করার সময় আমি তখন ডিবাগ মোডে তৈরি করার চেষ্টা করেছি।
সম্পাদনা
আরও কিছু খনন করার পরে, আমি মনে করি যে আমার ইস্যুটি আমি গ্রন্থাগারটি তৈরি করছি তার ধরণের সাথে কিছু করা। সিএমকে দিয়ে গেস্ট তৈরি করার সময়, যদি BUILD_SHARED_LIBS
এটি পরীক্ষা না করা হয় এবং আমি আমার প্রোগ্রামটিকে এই .lib ফাইলগুলির সাথে লিঙ্ক করি তবে আমি উপরে উল্লিখিত ত্রুটিগুলি পেয়েছি। যাইহোক, যদি BUILD_SHARED_LIBS
চেক করা হয় তবে আমি .lib এবং .dll ফাইলের সেট তৈরি করি। এখন এই .lib এর সাথে সংযোগ স্থাপনের পরে প্রোগ্রামটি সংকলন করে, কিন্তু রান যখন অভিযোগ করে যে এটি gest.dll খুঁজে পাচ্ছে না।
SHARED
না এবং SHARED
পাঠাগার নয় এমন লাইব্রেরির মধ্যে কী পার্থক্য রয়েছে এবং আমি যদি ভাগ না করা পছন্দ করি তবে এটি কেন কাজ করে না? আমার প্রকল্পটির জন্য সিএমকেলিস্ট.টেক্সটে কোনও বিকল্প আছে যা আমি অনুপস্থিত?
enable_testing()
?
ExternalProject_Add
পরিবর্তে ব্যবহার করে আপনি নিজের মধ্যে জিটিস্ট উত্সগুলি অন্তর্ভুক্ত করতে পারবেনadd_subdirectory
। বিস্তারিত জানার জন্য এই উত্তরটি দেখুন ।