2015-06-23 17 views
12

Qt QTest ile gelir ve bazı belgeler vardır: örneğin, an official tutorial. Ancak, QTestQTest, birim sınamalarını ayrı yürütücüler olarak düzenlemenizi önerir. Bunun için özel bir makro var, bu da : QTEST_MAIN() Dürüst olmak gerekirse, bu yaklaşımı gerçekten beğenmiyorum: Genel olarak, son değişikliklerin güvenliğini sağlamak için tüm testleri tek seferde çalıştırmak çok daha yararlıdır. Bir şey bozuldu. Bazen,, bazı testlerin maskelenmesi veya bazı bireysel testlerin yürütülmesi yararlıdır, ancak bu bir kural değildir, istisnadır.Qt: Birden çok sınama sınıfından birim sınamalarını çalıştır ve bunların tümünü çıkış olarak özetle

Tüm testleri tek seferde çalıştırmak istiyorum. Tamam, yazabilir benim böyle, ben diyelim ki, istediğiniz tüm testleri yürüten main() kendi:

int main(int argc, char **argv) 
{ 
    int status = 0; 

    //-- run all tests 
    { 
     TestHTCodecISO14230 tc; 
     status |= QTest::qExec(&tc, argc, argv); 
    } 

    { 
     TestHTDataMsg tc; 
     status |= QTest::qExec(&tc, argc, argv); 
    } 

    return status; 
} 

Ve hepsi testler, ancak sorun tüm testlerin uygun özetini yok olmasıdır. De ki, yukarıdaki iki test için, iki ayrı özetleri vardır:

hata durumunda olmayan sıfır olacaktır status döndü bakmasıyla yararlı, ama özetini varsa çok daha yararlı olacaktır olduğunu

********* Start testing of TestHTCodecISO14230 ********* 
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1) 
PASS : TestHTCodecISO14230::initTestCase() 
PASS : TestHTCodecISO14230::decode_summary() 
PASS : TestHTCodecISO14230::encode() 
PASS : TestHTCodecISO14230::decode_encoded() 
PASS : TestHTCodecISO14230::cleanupTestCase() 
Totals: 5 passed, 0 failed, 0 skipped, 0 blacklisted 
********* Finished testing of TestHTCodecISO14230 ********* 
********* Start testing of TestHTDataMsg ********* 
Config: Using QtTest library 5.4.1, Qt 5.4.1 (i386-little_endian-ilp32 shared (dynamic) release build; by GCC 4.6.1) 
PASS : TestHTDataMsg::initTestCase() 
PASS : TestHTDataMsg::test1() 
PASS : TestHTDataMsg::cleanupTestCase() 
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted 
********* Finished testing of TestHTDataMsg ********* 
yanı:

mümkün değildir benim gördüğüm itibaren
Totals: 8 passed, 0 failed, 0 skipped, 0 blacklisted 

: qExec()QTest ad alanında sadece bir işlevdir: Ben programlı geçti sayısını almak için yol bulamıyorum, başarısız atlanır ve kara listeye testler Böylece, yürütdükten sonra bazı ek bilgi toplamak mümkün değildir.

Eh, kötü tasarım gibi görünüyor Bana göre

... ugh, çıkış dizesini ayrıştırmak mümkündür, ancak. Bir sınıf olarak QTest yapmak çok daha iyi olur, daha sonra bunun örneğini oluşturur ve bazı test sınıflarını besler. Daha sonra, bir örnekten bazı ek bilgiler toplanabilir. Ya da belki bir şeyleri özledim.

Yani, soru şu: QTest ile tüm birim test sınıflarının özet çıktılarına sahip olmak mümkün mü? Benim yorumunda yazdığı gibi

+0

Sınıfınız TestHTCodecISO14230 ve TestHTDataMsg'lerini değil mi? Başarısız test sayılarını işlemek için neden onları genişletemiyorsunuz? – vahancho

cevap

8

, aşağıdaki şekilde benim test sınıfları inşa edecek: Eğer MyTests sınıfın birden çok örneği varsa

class MyTests: public QObject 
{ 
    Q_OBJECT 
public: 
    MyTests() : m_executed(0), m_failed(0) 
private slots: 
    [..] 
    // This function will be called after each test 
    void cleanup() 
    { 
     m_executed++; 
     if (currentTestFailed()) { 
      m_failed++; 
     }   
    } 

    // Output the summary of the test execution. 
    void report() const 
    { 
     qDebug() << "Totals:" 
       << m_executed - m_failed << "passed," 
       << m_failed << "failed"; 
    } 
private: 
    int m_executed; 
    int m_failed; 
}; 

, onun API genişletmek ve üreten yürütme sonuçlarını özetleyebilirim küresel test yürütme raporu. Sadece C++ sınıflarının tüm gücünü kullanın.

+0

Cevabınız için teşekkürler, ancak 'QCOMPARE()' makro ve arkadaşlarını kullanamayacağım; Onları bir şekilde yeniden icat etmek zorundayım. Deneyeceğim. –

+1

@DmitryFrank, fakat neden QCOMPARE() kullanamıyorsunuz? Lütfen açıkla. – vahancho

İlgili konular