Cara menjalankan kasus pengujian tertentu di GoogleTest

125

Saya mencoba menulis fungsi / metode untuk proyek saya, yang akan menanyakan kepada pengguna, semua kasus uji mana yang akan Anda jalankan? Ini terlihat seperti di bawah ...,

Test_Cases_1
         |_TestNo1
         |_TestNo2....so on
Test_Cases_2
         |_TestNo1
         |_TestNo2....so on
....
....so on
Test_Cases_N
         |_TestNo1
         |_TestNo2....so on

Jadi, sekarang tantangannya adalah saat menjalankan proyek itu harus memberi tahu saya apa semua kasus uji yang ingin Anda jalankan? Jika saya memilih Test_Cases_1dan Test_Cases_N. Maka itu harus menjalankan dua kasus uji ini dan harus mengecualikan semua lainnya dari Test_Cases_2 to ..... Di jendela hasil juga saya ingin melihat hasil dari Test_Cases_1dan Test_Cases_N.

Jadi, jika saya akan melihat GoogleTest, ada metode yang disebut test_case_to_run_count(); Tetapi semua test casesdidaftarkan dengan metode Test_F (). Jadi, saya melakukan banyak analisis, tetapi tetap tidak menemukan solusi apa pun. Tolong bantu aku.

Rasmi Ranjan Nayak
sumber

Jawaban:

181

Anda dapat menggunakan opsi lanjutan untuk menjalankan tes Google.

Untuk menjalankan hanya beberapa pengujian unit, Anda dapat menggunakan --gtest_filter=Test_Cases1*opsi baris perintah dengan nilai yang menerima *dan karakter ?pengganti untuk mencocokkan dengan beberapa pengujian. Saya pikir itu akan menyelesaikan masalah Anda.

UPD:

Nah, pertanyaannya adalah bagaimana menjalankan kasus uji tertentu. Integrasi gtest dengan GUI Anda adalah hal lain, yang tidak dapat saya komentari, karena Anda tidak memberikan detail pendekatan Anda. Namun saya yakin pendekatan berikut mungkin merupakan awal yang baik:

  1. Dapatkan semua kasus pengujian dengan menjalankan pengujian dengan --gtest_list_tests
  2. Parsing data ini ke GUI Anda
  3. Pilih kasus uji yang ingin Anda jalankan
  4. Jalankan uji yang dapat dieksekusi dengan opsi --gtest_filter
nogard
sumber
Saya akan merekomendasikan ini, dan jika Anda memerlukan sistem berbasis prompt maka saya sarankan membuat skrip pembungkus yang mendapatkan input pengguna dan menjalankan program pengujian yang sesuai.
boycy
@nogard: Ya, Anda benar, tetapi saya / tujuan kami adalah untuk memiliki GUI, yang akan memiliki Treedari TestCasesdan TestNo. Jadi, apakah menurut Anda --gtest_filter=..akan membantu?
Rasmi Ranjan Nayak
@nogard: Terima kasih Banyak atas bantuannya ... Saya akan melanjutkan seperti yang Anda arahkan .. Saya akan memberi tahu Anda setelah saya selesai.
Rasmi Ranjan Nayak
1
@nogard: Saya melakukan hal yang sama seperti yang Anda arahkan; int main(int argc, char **argv) { //::testing::GTEST_FLAG(list_tests) = true; // For Testing InitGoogleTest(&argc, argv); ::testing::GTEST_FLAG(list_tests) = true; ........ RUN_ALL_TEST();...}Tapi hanya mencetak Testcase dan TestNo. dan tetapi tidak menjalankan tes. Jadi, bagaimana saya bisa menjalankan tes sekarang?
Rasmi Ranjan Nayak
@RasmiRanjanNayak: Saya mengusulkan untuk tidak mengubah induk sama sekali. Saya mengusulkan untuk menjalankan tes dua kali: pertama kali menjalankan dengan --gtest_list_tests, kemudian menjalankan ke-2 untuk tes yang dipilih dengan opsi --gtest_filter
nogard
91

Meringkas jawaban @Rasmi Ranjan Nayak dan @nogard dan menambahkan opsi lain:

Di konsol

Anda harus menggunakan bendera --gtest_filter, seperti

--gtest_filter=Test_Cases1*

(Anda juga dapat melakukan ini di Properti | Properti Konfigurasi | Debugging | Argumen Perintah)

Tentang lingkungan

Anda harus mengatur variabel GTEST_FILTERseperti

export GTEST_FILTER = "Test_Cases1*"

Di kode

Anda harus menetapkan bendera filter, seperti

::testing::GTEST_FLAG(filter) = "Test_Cases1*";

sehingga fungsi utama Anda menjadi seperti

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::GTEST_FLAG(filter) = "Test_Cases1*";
    return RUN_ALL_TESTS();
}

Lihat bagian Menjalankan Subset Pengujian untuk info lebih lanjut tentang sintaks string yang dapat Anda gunakan.

Jorge Leitão
sumber
6
sangat berguna pada bagian "Pada kode" !! Inilah yang saya cari !!
Iero
28

Akhirnya saya mendapat jawaban, ::test::GTEST_FLAG(list_tests) = true;// Dari program Anda, bukan konsol wrt.

Jika Anda ingin menggunakan --gtest_filter =*; /* =*, =xyz*... etc*/// Anda perlu menggunakannya di Konsol.

Jadi, persyaratan saya adalah menggunakannya dari program bukan dari konsol.

Updated:-

Akhirnya saya mendapat jawaban untuk mengupdate yang sama dari program.

 ::testing::GTEST_FLAG(filter) = "*Counter*:*IsPrime*:*ListenersTest.DoesNotLeak*";//":-:*Counter*";
      InitGoogleTest(&argc, argv);
RUN_ALL_TEST();

Jadi, terima kasih atas semua jawabannya.

Kalian orang-orang hebat.

Rasmi Ranjan Nayak
sumber