diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8db9c60..3c092ba 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -83,4 +83,9 @@ vtk_module_autoinit(TARGETS geopro_tests MODULES ${VTK_LIBRARIES}) target_include_directories(geopro_tests PRIVATE ${CMAKE_SOURCE_DIR}/src/app) target_sources(geopro_tests PRIVATE app/test_chart_strategy_registry.cpp) +# controller 层:DatasetDetailController 编排集成测试(QSignalSpy 验证 chartReady/loadFailed)。 +find_package(Qt6 COMPONENTS Test REQUIRED) +target_sources(geopro_tests PRIVATE controller/test_dataset_detail_controller.cpp) +target_link_libraries(geopro_tests PRIVATE geopro_controller Qt6::Test) + add_subdirectory(spike) # spike S3: banded contour 渲染验证 diff --git a/tests/controller/test_dataset_detail_controller.cpp b/tests/controller/test_dataset_detail_controller.cpp new file mode 100644 index 0000000..1247677 --- /dev/null +++ b/tests/controller/test_dataset_detail_controller.cpp @@ -0,0 +1,30 @@ +#include +#include +#include "DatasetDetailController.hpp" +#include "repo/IDatasetRepository.hpp" +using namespace geopro; +namespace { +struct StubRepo : data::IDatasetRepository { + bool fail = false; + std::vector loadStructure() override { return {}; } + core::Grid loadGrid(const std::string&) override { if (fail) throw std::runtime_error("x"); core::Grid g(2,2); g.x={0,1}; g.y={0,1}; return g; } + core::ScatterField loadScatter(const std::string&) override { return {}; } + core::ColorScale loadColorScale(const std::string&) override { return {}; } + core::ColorScale loadScatterColorScale(const std::string&) override { return {}; } + std::vector loadAnomalies(const std::string&) override { return {}; } +}; +} +TEST(DatasetDetailController, EmitsChartReadyOnSuccess) { + StubRepo repo; + controller::DatasetDetailController c(repo); + QSignalSpy spy(&c, &controller::DatasetDetailController::chartReady); + c.openDataset("ds1", "dd_inversion_data"); + EXPECT_EQ(spy.count(), 1); +} +TEST(DatasetDetailController, EmitsLoadFailedOnThrow) { + StubRepo repo; repo.fail = true; + controller::DatasetDetailController c(repo); + QSignalSpy spy(&c, &controller::DatasetDetailController::loadFailed); + c.openDataset("ds1", "dd_inversion_data"); + EXPECT_EQ(spy.count(), 1); +}