2011-01-20 32 views
14

Bất kỳ ai cũng có thể cho tôi một ví dụ về một số mã kiểm tra QT và một CMakeLists.txt xây dựng với Cmake và chạy với CTest. Tôi dường như không tìm thấy bất kỳ thứ gì!Tạo các Thử nghiệm Qt với CMake

-Kurtis

Trả lời

10

Một ví dụ lấy từ Charm (thử nghiệm/CMakeLists.txt):

SET(TestApplication_SRCS TestApplication.cpp) 
SET(TEST_LIBRARIES CharmCore ${QT_QTTEST_LIBRARY} ${QT_LIBRARIES}) 

SET(SqLiteStorageTests_SRCS SqLiteStorageTests.cpp) 
QT4_AUTOMOC(${SqLiteStorageTests_SRCS}) 
ADD_EXECUTABLE(SqLiteStorageTests ${SqLiteStorageTests_SRCS}) 
TARGET_LINK_LIBRARIES(SqLiteStorageTests ${TEST_LIBRARIES}) 
ADD_TEST(NAME SqLiteStorageTests COMMAND SqLiteStorageTests) 

Sự khác biệt duy nhất một thực thi bình thường là bạn gọi ADD_TEST vĩ mô. Hãy xem ví dụ: Charm để xem nó trong hành động.

+0

Perfect. Tuyệt vời. Cảm ơn nhiều. –

+2

Hy vọng rằng điều này sẽ giúp bạn tiết kiệm thời gian hơn một chút - theo [trang này] (http://qt-project.org/wiki/Writing_Unit_Tests): "Lưu ý rằng CMake không thể xử lý các tệp qtest với moc bao gồm tại dưới cùng. " –

+0

Nếu đúng như vậy, bạn phải nhớ tự động hóa các tệp thử nghiệm của mình. – jackyalcine

22

Dưới đây là ví dụ về cách sử dụng cmake 2.8.11 và Qt5.2. Lưu ý rằng cmake giờ đây hỗ trợ các tệp thử nghiệm với một .moc-include ở phía dưới.

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.11) 
project(foo) 

enable_testing() 

# Tell CMake to run moc when necessary: 
set(CMAKE_AUTOMOC ON) 

# As moc files are generated in the binary dir, tell CMake 
# to always look for includes there: 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 

find_package(Qt5Test REQUIRED) 

add_executable(foo foo.cpp) 
add_test(foo foo) 

target_link_libraries(foo Qt5::Test) 

Foo.cpp:

#include <QTest> 

class Foo : public QObject { 
    Q_OBJECT 
private slots: 
    void t1() { QVERIFY(true); } 
}; 

QTEST_MAIN(Foo) 
#include "foo.moc" 
+1

+1 để sử dụng với qt5. –

+0

Tôi đã phải chỉnh sửa dòng cuối cùng của CMakeList để biên dịch mã: target_link_libraries (foo Qt5 :: Widgets Qt5 :: Test). 1 cho qt5. Tôi không chắc đó là tôi hay thực ra là một lỗi, vì vậy tôi không sửa câu trả lời. – cauchy

+0

@cauchy: tốt, tất nhiên nếu kiểm tra của bạn yêu cầu QtWidgets, nó cần phải được liên kết trong ...: P – Smar

Các vấn đề liên quan