BUG: Seven ImageProcessing tests never run under ctest because their names contain a semicolon
Maintainer thường phản hồi trong vòng 3 ngày
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 78/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- cmake, cpp
- Lĩnh vực
- testing-qa
Hướng nghiên cứu
Bắt đầu với bảy trường hợp kiểm thử bị ảnh hưởng được nêu trong issue, đặc biệt là BinaryMorphologicalClosingImageFilterTest.cpp, và xem phần Testing của docs/Code_Style_Guide.md. Sau khi cập nhật tên, hãy chạy các kiểm thử bị ảnh hưởng bằng ctest, kiểm tra rằng mỗi tên kiểm thử đầy đủ đều được đăng ký và chạy, thay vì vượt qua với thông báo “No test cases matched.”.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Problem
Seven ImageProcessing test cases never run under ctest, and ctest reports them as passed. Their names contain a
semicolon, and test discovery splits each name at the semicolon into two ctest entries. Neither entry matches a test
case, so Catch2 runs nothing and exits successfully.
- Expected: every visible test case is registered with ctest under its full name and runs.
- Actual: each of these cases becomes two entries such as
ImageProcessing::BinaryMorphologicalClosingImageFilter: Computed-expected (safeBorder=falseand
both algorithm paths). Both printNo test cases matchedand pass in about 0.02 s.
Occurs on develop at f58acc169595694742cf2afae63ed5e1d3224cf8. The affected test cases:
BinaryMorphologicalClosingImageFilterTest.cppL38 and L104ContourEngineTest.cppL648GrayscaleMorphologicalOpeningImageFilterTest.cppL18GrayscaleMorphologicalClosingImageFilterTest.cppL18WhiteTopHatImageFilterTest.cppL18BlackTopHatImageFilterTest.cppL18
Steps to Reproduce
- Configure a build with
SIMPLNX_BUILD_TESTS=ONand buildImageProcessingUnitTest. - List the registered tests:
ctest --test-dir "<build-dir>" -N -R "safeBorder=false$|both algorithm paths\)$|labels differ\)$".
The list shows the name fragments, not the full names. - Ask ctest for one full name:
ctest --test-dir "<build-dir>" -R "^ImageProcessing::BinaryMorphologicalClosingImageFilter: Computed-expected \(safeBorder=false; both algorithm paths\)$" --no-tests=error.
ctest finds no test. - Run one fragment with
-V: the command passes" both algorithm paths)"to the executable, Catch2 prints
No test cases matched, and ctest reportsPassed.
Cause
cmake/Plugin.cmake L410 registers the plugin tests with
catch_discover_tests(${UNIT_TEST_TARGET}). In Catch2 2.13.6, the discovery script CatchAddTests.cmake (in the
vcpkg Catch2 package) turns the output of --list-test-names-only into a CMake list and registers one test per
element:
string(REPLACE "\n" ";" output "${output}")
...
foreach(line ${output})
A semicolon is the CMake list separator, so a test name that contains ; becomes two list elements. The script
escapes ,, [ and ] in the test spec it passes to the executable, but nothing protects ;.
Verification Unit Test
The existing test cases are the verification; no new test is needed. For example, from
src/Plugins/ImageProcessing/test/BinaryMorphologicalClosingImageFilterTest.cpp:
TEST_CASE("ImageProcessing::BinaryMorphologicalClosingImageFilter: Computed-expected (safeBorder=false; both algorithm paths)",
"[ImageProcessing][BinaryMorphologicalClosingImageFilter]")
Command that should run it (in-core Release build of develop, macOS arm64):
ctest --test-dir "<build-dir>" -R "^ImageProcessing::BinaryMorphologicalClosingImageFilter: Computed-expected \(safeBorder=false; both algorithm paths\)$" -j 1 --output-on-failure --timeout 300 --no-tests=error
Observed:
No tests were found!!!
Errors while running CTest
And the fragment that ctest does run:
203: Test command: .../Bin/ImageProcessingUnitTest " both algorithm paths)"
203: No test cases matched 'both algorithm paths)'
1/1 Test #203: both algorithm paths) ........... Passed 0.02 sec
Proposed Fix
- Replace the
;in the seven test names with,(for example
Computed-expected (safeBorder=false, both algorithm paths)). Run the seven tests afterwards: they have not run
under ctest, so they may fail. - Keep it from coming back: add a rule to
docs/Code_Style_Guide.md(Testing) that a test case name contains no
;, and optionally a CMake check after discovery that fails when a registered name does not match a test case.
Notes
- Found while checking the test registration for BlueQuartzSoftware/simplnx#1889; that pull request does not change
this behavior (its split discovery registers the same names). - One SimplnxOoc test case has the same problem.
- Test names with commas, brackets or parentheses register correctly.
- Ngôn ngữ chính
- C++
- Star
- 18
- Fork
- 15
- Merge trung bình
- 3 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 27
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của BlueQuartzSoftware/simplnx
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
BlueQuartzSoftware/simplnx#1912 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
BlueQuartzSoftware/simplnx#1906 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
bug Filter
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
BlueQuartzSoftware/simplnx#1891 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
bug Filter
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
BlueQuartzSoftware/simplnx#1860 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 3 ngày
-
documentation
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
BlueQuartzSoftware/simplnx#1847 ·
Maintainer thường phản hồi trong vòng 3 ngày
Tất cả issue của BlueQuartzSoftware/simplnx
Issue tương tự
-
Linux npm packaging leaves workspace files that block subsequent CI checkoutCó thể đã có người làm @Spockkk0225 đã nhận hôm nay. Đang mởci
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
alibaba/neug#1195 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 3 ngày
-
Bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
SCIInstitute/SCIRun#2909 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
area: packaging blocked dependencies P3: low post-stable value: medium
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
patrick-hudson/put.gd-desktop#1210 ·
Maintainer thường phản hồi trong vòng 1 ngày