Câu hỏi Cách chạy các trường hợp thử nghiệm cụ thể trong GoogleTest


Tôi đang cố gắng viết một chức năng / phương pháp cho dự án của tôi, mà sẽ yêu cầu người dùng mà tất cả các trường hợp thử nghiệm là bạn sẽ chạy? Có vẻ như bên dưới ...,

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

Vì vậy, bây giờ thách thức là trong khi chạy dự án nó nên nhắc tôi những gì tất cả các trường hợp thử nghiệm bạn muốn thực hiện? Nếu tôi chọn Test_Cases_1 và Test_Cases_N. Sau đó, nó nên thực hiện hai trường hợp thử nghiệm này và nên loại trừ tất cả các trường hợp khác khỏi Test_Cases_2 to ..... Trong cửa sổ kết quả, tôi cũng muốn xem kết quả của Test_Cases_1 và Test_Cases_N.

Vì vậy, nếu tôi sẽ thấy GoogleTest, có một phương pháp được gọi là test_case_to_run_count(); Nhưng tất cả test cases đang được đăng ký với phương thức Test_F (). Vì vậy, tôi đã làm rất nhiều phân tích, nhưng vẫn không tìm thấy bất kỳ giải pháp. Làm ơn giúp tôi.


76
2017-08-22 15:04


gốc




Các câu trả lời:


Bạn đã có thể sử dụng tùy chọn nâng cao để chạy thử nghiệm của Google.

Chỉ chạy một số bài kiểm tra đơn vị bạn có thể sử dụng --gtest_filter=Test_Cases1* tùy chọn dòng lệnh có giá trị là cụm từ thông dụng. Tôi nghĩ rằng nó sẽ giải quyết vấn đề của bạn.

UPD:

Vâng, câu hỏi là làm thế nào để chạy trường hợp kiểm tra cụ thể. Việc tích hợp gtest với GUI của bạn là một thứ khác mà tôi không thể nhận xét, bởi vì bạn không cung cấp chi tiết về cách tiếp cận của mình. Tuy nhiên tôi tin rằng cách tiếp cận sau đây có thể là một khởi đầu tốt:

  1. Nhận tất cả testcases bằng cách chạy thử nghiệm với --gtest_list_tests
  2. Phân tích cú pháp dữ liệu này vào GUI của bạn
  3. Chọn trường hợp kiểm tra bạn muốn chạy ro
  4. Chạy thử nghiệm thực thi với tùy chọn --gtest_filter

120
2017-08-22 15:10



Tôi muốn khuyên bạn nên điều này, và nếu bạn cần một hệ thống dựa trên nhắc nhở sau đó tôi muốn đề nghị tạo một kịch bản wrapper được người sử dụng đầu vào và chạy chương trình thử nghiệm cho phù hợp. - boycy
@ nogard: Vâng, bạn nói đúng, nhưng mục đích của tôi / chúng tôi là có một GUI, nó sẽ có Tree của TestCases và TestNo. Vì vậy, bạn có nghĩ rằng --gtest_filter=.. sẽ giúp? - Rasmi Ranjan Nayak
@RasmiRanjanNayak: vui lòng xem cập nhật câu trả lời của tôi - nogard
@ nogard: Cảm ơn rất nhiều vì sự giúp đỡ ... Tôi sẽ đi trước như bạn đã chỉ đạo .. Tôi sẽ cho bạn biết một khi tôi đã làm xong. - Rasmi Ranjan Nayak
@nogard: Tôi đang làm giống như bạn đã đạo diễn; 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();...} Nhưng nó chỉ in Testcase và TestNo. và nó không chạy thử nghiệm. Vì vậy, làm thế nào tôi có thể chạy các bài kiểm tra ngay bây giờ? - Rasmi Ranjan Nayak


Tóm tắt @Rasmi Ranjan Nayak và @nogard trả lời và thêm một tùy chọn khác:

Trên bảng điều khiển

Bạn nên sử dụng cờ --gtest_filter, như

--gtest_filter=Test_Cases1*

(Bạn cũng có thể làm điều này trong Properties | Configuration Properties | Debugging | Command Arguments)

Về môi trường

Bạn nên đặt biến GTEST_FILTER như

export GTEST_FILTER = "Test_Cases1*"

Trên mã

Bạn nên đặt cờ filter, như

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

sao cho chức năng chính của bạn trở thành một cái gì đó như

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

Xem phần Chạy một tập hợp con của các xét nghiệm để biết thêm thông tin về cú pháp của chuỗi bạn có thể sử dụng.


48
2017-08-23 12:27



rất hữu ích phần "Trên mã" !! Đây là những gì tôi đang tìm kiếm !! - Iero


Cuối cùng tôi có một số câu trả lời, ::test::GTEST_FLAG(list_tests) = true; // Từ chương trình của bạn, không phải bảng điều khiển w.r.t.

Nếu bạn muốn sử dụng --gtest_filter =*;  /* =*, =xyz*... etc*/ // Bạn cần sử dụng chúng trong Bảng điều khiển.

Vì vậy, yêu cầu của tôi là sử dụng chúng từ chương trình không phải từ bảng điều khiển.

Updated:-

Cuối cùng tôi đã nhận được câu trả lời cho việc cập nhật giống nhau từ chương trình.

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

Vì vậy, Cảm ơn tất cả các câu trả lời.

Bạn là người tuyệt vời.


22