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


125

Tôi đang cố gắng viết một hàm / phương thức cho dự án của mình, hàm này sẽ hỏi người dùng rằng bạn sẽ chạy tất cả các trường hợp thử nghiệm nào? Nó trông giống 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ó sẽ 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_1Test_Cases_N. Sau đó, nó sẽ thực thi 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_1Test_Cases_N.

Vì vậy, nếu tôi 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đều đượ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.

Câu trả lời:


181

Bạn có thể sử dụng các tùy chọn nâng cao để chạy các bài kiểm tra 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 với giá trị chấp nhận các ký tự đại diện *?để khớp với nhiều bài kiểm tra. Tôi nghĩ rằng nó sẽ giải quyết vấn đề của bạn.

CẬP NHẬT:

Chà, câu hỏi là làm thế nào để chạy các trường hợp thử nghiệm cụ thể. Tích hợp gtest với GUI của bạn là một điều khác, mà tôi thực sự không thể bình luận, 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ả các tủ thử nghiệm 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 các trường hợp thử nghiệm bạn muốn ro chạy
  4. Chạy thử nghiệm thực thi với tùy chọn --gtest_filter

Tôi 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 lời nhắc thì tôi khuyên bạn nên tạo một tập lệnh trình bao bọc lấy đầu vào của người dùng và chạy chương trình thử nghiệm tương ứng.
boycy

@nogard: Vâng, bạn là đúng, nhưng tôi / Mục đích của chúng tôi là phải có một giao diện đồ họa, trong đó sẽ có Treecủa TestCasesTestNo. Vì vậy, bạn có nghĩ rằng --gtest_filter=..sẽ giúp đỡ?
Rasmi Ranjan Nayak

@nogard: Cảm ơn rất nhiều vì sự giúp đỡ ... Tôi sẽ tiếp tục như bạn đã chỉ dẫn .. Tôi sẽ cho bạn biết khi tôi hoàn thành.
Rasmi Ranjan Nayak

1
@nogard: Tôi đang làm giống như bạn đã hướng dẫ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à nhưng nó không chạy các bài kiểm tra. Vì vậy, làm thế nào tôi có thể chạy các bài kiểm tra bây giờ?
Rasmi Ranjan Nayak

@RasmiRanjanNayak: Tôi đã đề xuất không thay đổi chính. Tôi đề nghị để chạy thử nghiệm hai lần: lần 1 để chạy với --gtest_list_tests, sau đó chạy thứ 2 cho các cuộc thử nghiệm được lựa chọn với tùy chọn --gtest_filter
nogard

91

Tóm tắt câu trả lời của @Rasmi Ranjan Nayak và @nogard 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ể thực hiện việc này trong Thuộc tính | Thuộc tính cấu hình | Gỡ lỗi | Đối số lệnh)

Trên môi trường

Bạn nên đặt biến GTEST_FILTERnhư

export GTEST_FILTER = "Test_Cases1*"

Trên mã

Bạn nên đặt một lá 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ì đó giống 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 tập hợp con của các bài kiểm tra để biết thêm thông tin về cú pháp của chuỗi bạn có thể sử dụng.


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

28

Cuối cùng tôi đã nhận đượ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 wrt.

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

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 cùng một trong 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 cho tất cả các câu trả lời.

Con người bạn thật tuyệt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.