GoogleTest'te belirli test senaryoları nasıl çalıştırılır?


125

Projem için bir işlev / yöntem yazmaya çalışıyorum, bu kullanıcıya hangi tüm test durumlarını çalıştıracağınızı soracak? Aşağıdaki gibi görünüyor ...,

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

Öyleyse, şimdi zorluk, projeyi yürütürken bana hangi tüm test senaryolarını yürütmek istediğinizi sormalıdır? Ben seçerseniz Test_Cases_1ve Test_Cases_N. Daha sonra bu iki test durumunu yürütmeli ve diğerlerini hariç tutmalıdır Test_Cases_2 to ..... Sonuç penceresinde ayrıca sonuçlarını görmek istiyorum Test_Cases_1ve Test_Cases_N.

GoogleTest'i görecek olursam, adında bir yöntem var test_case_to_run_count(); Ama hepsi test casesTest_F () yöntemi ile kayıt oluyor. Bu yüzden çok analiz yaptım ama yine de bir çözüm bulamadım. Lütfen bana yardım et.

Yanıtlar:


181

Google testlerini çalıştırmak için gelişmiş seçenekleri kullanabilirsiniz .

Yalnızca bazı birim testlerini çalıştırmak için, birden çok testle eşleştirme --gtest_filter=Test_Cases1*için *ve ?joker karakterlerini kabul eden değere sahip komut satırı seçeneğini kullanabilirsiniz . Sorununuzu çözeceğini düşünüyorum.

UPD:

Sorun, belirli test senaryolarının nasıl çalıştırılacağıydı . Gtest'in GUI'nizle entegrasyonu başka bir şey, gerçekten yorumlayamayacağım, çünkü yaklaşımınızın ayrıntılarını vermediniz. Ancak aşağıdaki yaklaşımın iyi bir başlangıç ​​olabileceğine inanıyorum:

  1. İle testleri çalıştırarak tüm test olaylarını alın --gtest_list_tests
  2. Bu verileri GUI'nize ayrıştırın
  3. Çalıştırmak istediğiniz test senaryolarını seçin
  4. Seçenekle çalıştırılabilir testi çalıştırın --gtest_filter

Bunu tavsiye ederim ve komut istemi tabanlı bir sisteme ihtiyacınız varsa, kullanıcı girdisini alan ve test programını buna göre çalıştıran bir sarmalayıcı komut dosyası oluşturmanızı öneririm.
boycy

@nogard: Evet, haklısın ama benim / amacımız olacak bir GUI, sahip olmaktır Treearasında TestCasesve TestNo. Öyleyse, --gtest_filter=..yardımcı olacağını düşünüyor musun?
Rasmi Ranjan Nayak

@nogard: Yardım için çok teşekkürler ... Yönlendirdiğiniz gibi devam edeceğim .. İşim bittiğinde size haber vereceğim.
Rasmi Ranjan Nayak

1
@nogard: Senin yönetmenliğin aynısını yapıyorum; 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();...}Ancak yalnızca Test Case ve TestNo'yu yazdırır. ve ancak testleri çalıştırmaz. Peki şimdi testleri nasıl yapabilirim?
Rasmi Ranjan Nayak

@RasmiRanjanNayak: Ana olanı değiştirmemeyi önerdim. Testleri iki kez çalıştırmayı öneriyorum: 1. kez --gtest_list_tests ile çalıştırılacak, ardından 2. çalıştırma --gtest_filter
nogard

91

@Rasmi Ranjan Nayak ve @nogard cevaplarını özetlemek ve başka bir seçenek eklemek:

Konsolda

Bayrağı aşağıdaki --gtest_filtergibi kullanmalısın

--gtest_filter=Test_Cases1*

(Bunu Özellikler | Yapılandırma Özellikleri | Hata Ayıklama | Komut Bağımsız Değişkenleri'nde de yapabilirsiniz)

Çevrede

Değişkeni aşağıdaki GTEST_FILTERgibi ayarlamalısınız

export GTEST_FILTER = "Test_Cases1*"

Kodda

Bir bayrak belirlesin filtergibi

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

öyle ki ana işleviniz

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

Kullanabileceğiniz dizinin sözdizimi hakkında daha fazla bilgi için Testlerin Alt Kümesini Çalıştırma bölümüne bakın .


6
"Kodda" bölümü çok yararlı !! Bu aradığım şey !!
Iero

28

Sonunda bir cevap aldım ::test::GTEST_FLAG(list_tests) = true; // programınızdan, konsoldan değil.

Kullanmak istersen --gtest_filter =*; /* =*, =xyz*... etc*/// bunları Console'da kullanmanız gerekir.

Bu yüzden benim ihtiyacım bunları konsoldan değil programdan kullanmak.

Updated:-

Sonunda programdan aynı şeyi güncellemenin cevabını aldım.

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

Öyleyse, tüm cevaplar için teşekkürler.

Siz harikasınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.