Debian tidak lagi menyediakan paket prakompilasi untuk gTest. Mereka menyarankan Anda mengintegrasikan kerangka kerja ke dalam file makefile proyek Anda. Tapi saya ingin menjaga makefile saya tetap bersih. Bagaimana cara menyiapkan gTest seperti versi sebelumnya (<1.6.0), sehingga saya dapat menautkan ke perpustakaan?
c++
linux
unit-testing
installation
googletest
ManuelSchneid3r
sumber
sumber
./configure && make && make install
alur kerja standar akan berfungsi dengan baik. Saya tidak yakin apakah ini memerlukan posting karena tidak ada bedanya dengan mengkompilasi banyak paket lain dari sumber.Jawaban:
Sebelum Anda mulai, pastikan Anda telah membaca dan memahami catatan ini dari Google ! Tutorial ini membuat penggunaan gtest mudah, tetapi dapat menyebabkan bug yang tidak menyenangkan .
1. Dapatkan kerangka kerja googletest
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
Atau dapatkan dengan tangan . Saya tidak akan mempertahankan How-to kecil ini, jadi jika Anda menemukannya dan tautannya sudah usang, silakan mengeditnya.
2. Buka kemasan dan buat pengujian google
tar xf release-1.8.0.tar.gz cd googletest-release-1.8.0 cmake -DBUILD_SHARED_LIBS=ON . make
3. "Instal" header dan libs di sistem Anda.
Langkah ini mungkin berbeda dari satu distro ke distro, jadi pastikan Anda menyalin header dan libs ke direktori yang benar. Saya menyelesaikan ini dengan memeriksa di mana bekas libs gtest Debian berada. Tapi saya yakin ada cara yang lebih baik untuk melakukan ini. Catatan:
make install
berbahaya dan tidak didukung4. Perbarui cache linker
... dan periksa apakah GNU Linker mengetahui libs
Jika hasilnya terlihat seperti ini:
libgtest.so.0 -> libgtest.so.0.0.0 libgtest_main.so.0 -> libgtest_main.so.0.0.0
maka semuanya baik-baik saja.
gTestframework sekarang siap digunakan. Jangan lupa untuk menautkan project Anda ke library dengan menyetel
-lgtest
sebagai flag linker dan secara opsional, jika Anda tidak menulis mainroutine pengujian Anda sendiri,-lgtest_main
flag eksplisit .Selanjutnya Anda mungkin ingin membuka dokumentasi Google , dan dokumen lama tentang kerangka kerja untuk mempelajari cara kerjanya. Selamat membuat kode!
Sunting: Ini juga berfungsi untuk OS X! Lihat "Cara menyiapkan googleTest dengan benar di OS X"
sumber
make install
target yang dapat Anda gunakan daripada menyalin pustaka dan header secara manual?'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
sejauh yang saya tahu.sudo cp -a libgtest_main.so libgtest.so /usr/lib/
tidak berfungsi lagi. File tersebut bahkan tidak ada di sana untuk memulai.Izinkan saya menjawab ini khusus untuk pengguna ubuntu. Pertama mulai dengan menginstal paket pengembangan paling gtest.
Perhatikan bahwa paket ini hanya menginstal file sumber. Anda harus mengkompilasi kode sendiri untuk membuat file perpustakaan yang diperlukan. File sumber ini harus ditempatkan di / usr / src / gtest. Jelajahi folder ini dan gunakan cmake untuk mengkompilasi perpustakaan:
sudo apt-get install cmake # install cmake cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. sudo make sudo make install
Sekarang untuk mengkompilasi program Anda yang menggunakan gtest, Anda harus menautkannya dengan:
Ini bekerja dengan sempurna untuk saya di Ubuntu 14.04LTS.
sumber
sudo cp *.a /usr/lib
, cukup repalcesudo make install
saja sudah cukup.Butuh beberapa saat bagi saya untuk mengetahuinya karena "make install" yang normal telah dihapus dan saya tidak menggunakan cmake. Inilah pengalaman saya untuk berbagi. Di tempat kerja, saya tidak memiliki akses root pada Linux, jadi saya menginstal kerangka uji Google di bawah direktori rumah saya:
~/usr/gtest/
.Untuk menginstal paket di ~ / usr / gtest / sebagai library bersama, bersama dengan contoh build juga:
$ mkdir ~/temp $ cd ~/temp $ unzip gtest-1.7.0.zip $ cd gtest-1.7.0 $ mkdir mybuild $ cd mybuild $ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" .. $ make $ cp -r ../include/gtest ~/usr/gtest/include/ $ cp lib*.so ~/usr/gtest/lib
Untuk memvalidasi penginstalan, gunakan test.c berikut sebagai contoh pengujian sederhana:
#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }
Untuk mengkompilasi:
$ export GTEST_HOME=~/usr/gtest $ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH $ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp
sumber
lgtest_main
), Anda tidak perlu menentukan milik Anda sendirimain
di file pengujian.Jika Anda kebetulan menggunakan CMake, Anda dapat menggunakan
ExternalProject_Add
seperti yang dijelaskan di sini .Ini menghindari Anda harus menyimpan kode sumber paling gt di repositori Anda, atau menginstalnya di mana saja. Itu diunduh dan dibangun di pohon build Anda secara otomatis.
sumber
Pembaruan untuk Debian / Ubuntu
Google Mock (paket:)
google-mock
dan Google Test (paketlibgtest-dev
:) telah digabungkan. Paket baru disebutgoogletest
. Kedua nama lama masih tersedia untuk kompatibilitas mundur dan sekarang bergantung pada paket barugoogletest
.Jadi, untuk mendapatkan perpustakaan Anda dari repositori paket, Anda dapat melakukan hal berikut:
sudo apt-get install googletest -y cd /usr/src/googletest sudo mkdir build cd build sudo cmake .. sudo make sudo cp googlemock/*.a googlemock/gtest/*.a /usr/lib
Setelah itu, Anda dapat menautkan ke
-lgmock
(atau melawan-lgmock_main
jika Anda tidak menggunakan metode utama khusus) dan-lpthread
. Ini cukup untuk menggunakan Google Test setidaknya dalam kasus saya.Jika Anda menginginkan versi Google Test terbaru, unduh dari github. Setelah itu, langkah-langkahnya serupa:
git clone https://github.com/google/googletest cd googletest sudo mkdir build cd build sudo cmake .. sudo make sudo cp lib/*.a /usr/lib
Seperti yang Anda lihat, jalur di mana pustaka dibuat telah berubah. Perlu diingat bahwa jalur baru mungkin juga akan segera berlaku untuk repositori paket.
Alih-alih menyalin pustaka secara manual, Anda bisa menggunakan
sudo make install
. Ini "saat ini" berfungsi, tetapi ketahuilah bahwa itu tidak selalu berhasil di masa lalu. Selain itu, Anda tidak memiliki kendali atas lokasi target saat menggunakan perintah ini dan Anda mungkin tidak ingin mencemari/usr/lib
.sumber
Saya juga merasa kurang beruntung dengan situasi ini dan akhirnya membuat paket sumber Ubuntu saya sendiri untuk ini. Paket sumber ini memungkinkan Anda menghasilkan paket biner dengan mudah. Mereka didasarkan pada sumber gtest & gmock terbaru pada posting ini.
Paket Sumber DEB Uji Google
Paket Sumber DEB Google Mock
Untuk membangun paket biner lakukan ini:
tar -xzvf gtest-1.7.0.tar.gz cd gtest-1.7.0 dpkg-source -x gtest_1.7.0-1.dsc cd gtest-1.7.0 dpkg-buildpackage
Ini mungkin memberi tahu Anda bahwa Anda memerlukan beberapa paket prasyarat dalam hal ini Anda hanya perlu menginstal apt-get. Selain itu, paket biner .deb yang dibangun harus ditempatkan di direktori induk.
Untuk GMock, prosesnya sama.
Sebagai catatan tambahan, meskipun tidak spesifik untuk paket sumber saya, saat menautkan gtest ke pengujian unit Anda, pastikan bahwa gtest disertakan terlebih dahulu ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) Ini tampak seperti Gotcha umum.
sumber
testing::Message::Message()' test.cpp:(.text+0x84): undefined reference to
testing :: internal :: AssertHelper :: AssertHelper (testing :: TestPartResult :: Type, char const *, int, char const *) 'test. cpp :(. text + 0x97): referensi tidak terdefinisi ke `testing :: internal :: AssertHelper :: operator = (testing :: Message const &) const '... sangat lama sehingga saya tidak dapat memposting semuanya. Saya melakukan ini di Ubuntu 14.04 VM yang baru sehingga tidak ada lagi yang diinstal kecuali dependensi yang diperlukan.#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }
Untuk berjaga-jaga jika ada orang lain yang berada dalam situasi yang sama seperti saya kemarin (2016-06-22) dan juga tidak berhasil dengan pendekatan yang sudah diposting - di
Lubuntu 14.04
atasnya berfungsi untuk saya menggunakan rantai perintah berikut:git clone https://github.com/google/googletest cd googletest cmake -DBUILD_SHARED_LIBS=ON . make cd googlemock sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/ sudo ldconfig
sumber
Jawaban dari askubuntu inilah yang berhasil untuk saya. Tampaknya lebih sederhana daripada opsi lain dan tidak terlalu rentan kesalahan, karena ia menggunakan paket
libgtest-dev
untuk mendapatkan sumber dan membangun dari sana: /ubuntu/145887/why-no-library-files-installed-for-google- test? answerertab = vote # tab-topSilakan merujuk ke jawaban itu, tetapi hanya sebagai jalan pintas saya juga memberikan langkah-langkahnya di sini:
Setelah itu, saya dapat membangun proyek saya yang bergantung
gtest
tanpa masalah.sumber
Metode berikut menghindari mengotak-atik
/usr/lib
direktori secara manual sementara juga membutuhkan sedikit perubahan padaCMakeLists.txt
file Anda . Ini juga memungkinkan manajer paket Anda menghapus instalasi dengan bersihlibgtest-dev
.Idenya adalah ketika Anda mendapatkan
libgtest-dev
paket melaluiSumber disimpan di lokasi
/usr/src/googletest
Anda cukup mengarahkan Anda
CMakeLists.txt
ke direktori itu sehingga dapat menemukan dependensi yang diperlukanCukup ganti
FindGTest
denganadd_subdirectory(/usr/src/googletest gtest)
Pada akhirnya, akan terlihat seperti ini
sumber
Ini akan menginstal tes google dan perpustakaan tiruan di sistem berbasis Ubuntu / Debian:
Diuji di google cloud dalam gambar berbasis debian.
sumber
googlemock
, tetapi tidak menginstalgoogletest
(gtest). Setidaknya itulah yang terjadi pada saya.Ini akan membangun dan menginstal gtest dan gmock 1.7.0:
mkdir /tmp/googleTestMock tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock cd /tmp/googleTestMock mv googletest-release-1.7.0 gtest cd googlemock-release-1.7.0 cmake -DBUILD_SHARED_LIBS=ON . make -j$(nproc) sudo cp -a include/gmock /usr/include sudo cp -a libgmock.so libgmock_main.so /usr/lib/ sudo cp -a ../gtest/include/gtest /usr/include sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/ sudo ldconfig
sumber
Untuk 1.8.1 berdasarkan jawaban @ ManuelSchneid3r, saya harus melakukan:
wget github.com/google/googletar xf release-1.8.1.tar.gz tar xf release-1.8.1.tar.gz cd googletest-release-1.8.1/ cmake -DBUILD_SHARED_LIBS=ON . make
Saya kemudian melakukan
make install
yang tampaknya berhasil untuk 1.8.1, tetapi mengikuti @ ManuelSchneid3r itu berarti:sumber