生成依据:
tdd-orchestrator/scripts/discover_tests.py对cfc-backend的只读扫描。 本仓库模式:TDD 编排器在 CFC 的定位是 发现 / 格式化 / 跟踪已有测试, 不创建测试用例、不发明需求缺口。所有数据来自仓库真实测试源代码。完整明细见docs/tdd/test/discovery.md。 跨源测试用例总台账(含tests/目录下的结构化用例 / Playwright / Python)见docs/tdd/test/inventory.md——每条均标注来源锚点,进度回写落在.tdd/test-progress.json侧车(不破坏原结构)。
CFC 采用「发现模式」:不在本文档播种任何
⏳虚构缺口键。 能力键池由discovery.md的真实覆盖缺口(uncovered / partial 控制器)推导; 若要把某缺口转化为测试任务,走tdd_orchestrate.py --add-task <unit.domain.action> --requirement <源> --design <源>显式入池(须带溯源锚点)。
| 指标 | 数值 |
|---|---|
| 控制器总数 | 356 |
| handler 方法总数 | 1918 |
| handler 已覆盖 | 198 (10%) |
| 控制器-已全覆盖(covered) | 16 |
| 控制器-部分覆盖(partial) | 68 |
| 控制器-未覆盖(uncovered) | 271 |
| 控制器-无 handler | 1 |
| 测试文件数 | 182 |
| @Test 方法总数 | 1371 |
| 含跳过/假设项(test 级 partial) | 4 |
| 模块 | 控制器 | handler | 已覆盖 | 覆盖率 |
|---|---|---|---|---|
| admin | 120 | 648 | 28 | 4% |
| guide | 19 | 121 | 26 | 21% |
| family | 15 | 94 | 15 | 16% |
| HealthReportController.java | 1 | 59 | 0 | 0% |
| product | 6 | 49 | 13 | 27% |
| content | 5 | 32 | 5 | 16% |
| mind | 8 | 32 | 3 | 9% |
| DanAssessmentController.java | 1 | 29 | 0 | 0% |
| task | 3 | 28 | 0 | 0% |
| HealthKnowledgeBaseController.java | 1 | 28 | 1 | 4% |
| assessment | 6 | 27 | 1 | 4% |
| auth | 2 | 21 | 14 | 67% |
| growth | 2 | 20 | 4 | 20% |
| ai | 5 | 20 | 4 | 20% |
| diet | 5 | 19 | 0 | 0% |
| MembershipController.java | 1 | 17 | 4 | 24% |
| fatloss | 4 | 16 | 0 | 0% |
| CircleController.java | 1 | 16 | 1 | 6% |
| OrchestrationController.java | 1 | 15 | 0 | 0% |
| recommendation | 5 | 15 | 0 | 0% |
| KeyPersonController.java | 1 | 14 | 0 | 0% |
| nutrition | 2 | 14 | 0 | 0% |
| ActivityController.java | 1 | 13 | 6 | 46% |
| CommissionController.java | 1 | 13 | 1 | 8% |
| HealthPlanController.java | 1 | 13 | 1 | 8% |
| user | 3 | 12 | 0 | 0% |
| stats | 1 | 12 | 4 | 33% |
| wish | 1 | 12 | 11 | 92% |
| BadgeController.java | 1 | 11 | 0 | 0% |
| wealth | 3 | 11 | 0 | 0% |
| reward | 2 | 11 | 0 | 0% |
| CouponController.java | 1 | 10 | 0 | 0% |
| TaskTemplatePackageController.java | 1 | 10 | 0 | 0% |
| UserController.java | 1 | 10 | 0 | 0% |
| subscription | 1 | 10 | 1 | 10% |
| GutHealthProjectController.java | 1 | 9 | 0 | 0% |
| MarketController.java | 1 | 9 | 0 | 0% |
| PearlController.java | 1 | 9 | 0 | 0% |
| butler | 2 | 9 | 1 | 11% |
| EnergyController.java | 1 | 9 | 5 | 56% |
| ContactController.java | 1 | 8 | 0 | 0% |
| DanReportController.java | 1 | 8 | 0 | 0% |
| FamilyChallengeController.java | 1 | 8 | 0 | 0% |
| PurchaseController.java | 1 | 8 | 0 | 0% |
| dan | 1 | 7 | 0 | 0% |
| planner | 1 | 7 | 0 | 0% |
| ShareController.java | 1 | 7 | 0 | 0% |
| StreetController.java | 1 | 7 | 0 | 0% |
| tianpan | 1 | 7 | 0 | 0% |
| shop | 4 | 7 | 1 | 14% |
| DoaController.java | 1 | 7 | 1 | 14% |
| ContactMatchController.java | 1 | 6 | 0 | 0% |
| CouponGiftController.java | 1 | 6 | 0 | 0% |
| FamilyEarningsController.java | 1 | 6 | 0 | 0% |
| FamilyPlatformBalanceController.java | 1 | 6 | 0 | 0% |
| PackagePaymentController.java | 1 | 6 | 0 | 0% |
| PromotionMaterialController.java | 1 | 6 | 0 | 0% |
| ServiceRoleApplicationController.java | 1 | 6 | 0 | 0% |
| config | 4 | 6 | 2 | 33% |
| FoodRecommendController.java | 1 | 6 | 2 | 33% |
| IndicatorController.java | 1 | 6 | 2 | 33% |
| cart | 1 | 5 | 0 | 0% |
| HealthCircleController.java | 1 | 5 | 0 | 0% |
| HealthGrowthRecordController.java | 1 | 5 | 0 | 0% |
| MealRecommendController.java | 1 | 5 | 0 | 0% |
| MediaController.java | 1 | 5 | 0 | 0% |
| MiniGameController.java | 1 | 5 | 0 | 0% |
| ReportMemberPermissionController.java | 1 | 5 | 0 | 0% |
| parent | 2 | 5 | 2 | 40% |
| ActivityOrderController.java | 1 | 5 | 1 | 20% |
| DailyCheckinController.java | 1 | 5 | 4 | 80% |
| GameRecordController.java | 1 | 5 | 1 | 20% |
| HealthDimensionController.java | 1 | 5 | 4 | 80% |
| HealthMealController.java | 1 | 5 | 1 | 20% |
| InviteController.java | 1 | 5 | 2 | 40% |
| PointsExchangeController.java | 1 | 5 | 1 | 20% |
| SurveyController.java | 1 | 5 | 1 | 20% |
| AttributionController.java | 1 | 4 | 0 | 0% |
| DistributionInviteController.java | 1 | 4 | 0 | 0% |
| HealthCheckinController.java | 1 | 4 | 0 | 0% |
| HealthStatusController.java | 1 | 4 | 0 | 0% |
| HomeController.java | 1 | 4 | 0 | 0% |
| MicroActionController.java | 1 | 4 | 0 | 0% |
| RegionController.java | 1 | 4 | 0 | 0% |
| UserIntentController.java | 1 | 4 | 0 | 0% |
| VirtualPayController.java | 1 | 4 | 0 | 0% |
| wisdom | 2 | 4 | 0 | 0% |
| ConsentController.java | 1 | 4 | 2 | 50% |
| OctopusController.java | 1 | 4 | 1 | 25% |
| ActivityFeedbackController.java | 1 | 3 | 0 | 0% |
| ActivityMaterialController.java | 1 | 3 | 0 | 0% |
| DailyFeedbackController.java | 1 | 3 | 0 | 0% |
| GrowthController.java | 1 | 3 | 0 | 0% |
| GrowthTaskController.java | 1 | 3 | 0 | 0% |
| HealthExerciseController.java | 1 | 3 | 0 | 0% |
| InviteCardController.java | 1 | 3 | 0 | 0% |
| PromotionController.java | 1 | 3 | 0 | 0% |
| ReportParserController.java | 1 | 3 | 0 | 0% |
| ReportSummaryController.java | 1 | 3 | 0 | 0% |
| UserSegmentationController.java | 1 | 3 | 0 | 0% |
| CfCommissionController.java | 1 | 3 | 1 | 33% |
| ReportSurveyController.java | 1 | 3 | 1 | 33% |
| ReviewController.java | 1 | 3 | 1 | 33% |
| vendor | 1 | 3 | 1 | 33% |
| CfBalanceController.java | 1 | 3 | 3 | 100% |
| IndicatorFavoriteController.java | 1 | 3 | 3 | 100% |
| CfTransferController.java | 1 | 2 | 0 | 0% |
| CircleChallengeController.java | 1 | 2 | 0 | 0% |
| DataPermissionController.java | 1 | 2 | 0 | 0% |
| HealthAlertController.java | 1 | 2 | 0 | 0% |
| HealthMeditationController.java | 1 | 2 | 0 | 0% |
| HealthScoreController.java | 1 | 2 | 0 | 0% |
| HealthSleepController.java | 1 | 2 | 0 | 0% |
| InviteMilestoneController.java | 1 | 2 | 0 | 0% |
| notice | 1 | 2 | 0 | 0% |
| OnboardingController.java | 1 | 2 | 0 | 0% |
| PackageLogisticsController.java | 1 | 2 | 0 | 0% |
| ProblemPackageController.java | 1 | 2 | 0 | 0% |
| profile | 1 | 2 | 0 | 0% |
| RecommendController.java | 1 | 2 | 0 | 0% |
| ReferralLeaderboardController.java | 1 | 2 | 0 | 0% |
| publicapi | 1 | 2 | 0 | 0% |
| UserNotificationController.java | 1 | 2 | 0 | 0% |
| UserNutritionProfileController.java | 1 | 2 | 0 | 0% |
| WithdrawalController.java | 1 | 2 | 0 | 0% |
| XiaoeWebhookController.java | 1 | 2 | 0 | 0% |
| sncp | 1 | 2 | 0 | 0% |
| BasicQuotaController.java | 1 | 2 | 1 | 50% |
| EmiReportController.java | 1 | 2 | 1 | 50% |
| HealthWaterController.java | 1 | 2 | 1 | 50% |
| NutritionistController.java | 1 | 2 | 1 | 50% |
| ProblemSurveyController.java | 1 | 2 | 1 | 50% |
| PromotionCommissionController.java | 1 | 2 | 1 | 50% |
| StreakController.java | 1 | 2 | 2 | 100% |
| AbilityController.java | 1 | 1 | 0 | 0% |
| CommonController.java | 1 | 1 | 0 | 0% |
| ContentFilterController.java | 1 | 1 | 0 | 0% |
| FamilyHealthController.java | 1 | 1 | 0 | 0% |
| HealthInteractionController.java | 1 | 1 | 0 | 0% |
| HealthPlanPublicController.java | 1 | 1 | 0 | 0% |
| HealthTimelineController.java | 1 | 1 | 0 | 0% |
| HomeBannerController.java | 1 | 1 | 0 | 0% |
| PosterTemplateController.java | 1 | 1 | 0 | 0% |
| ProblemDomainController.java | 1 | 1 | 0 | 0% |
| SeedEnergyController.java | 1 | 1 | 0 | 0% |
| ZodiacEnergyController.java | 1 | 1 | 0 | 0% |
| DailyTaskController.java | 1 | 1 | 1 | 100% |
| special | 1 | 1 | 1 | 100% |
| UnlockController.java | 1 | 1 | 1 | 100% |
| mcp | 1 | 0 | 0 | 0% |
以下控制器无任何 handler 被测试命中,是真实扫描得到的覆盖缺口。
AdminController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminController.java,65 方法)HealthReportController(cfc-backend/src/main/java/com/etotem/cfc/controller/HealthReportController.java,59 方法)DanAssessmentController(cfc-backend/src/main/java/com/etotem/cfc/controller/DanAssessmentController.java,29 方法)AdminArticleController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminArticleController.java,22 方法)TaskController(cfc-backend/src/main/java/com/etotem/cfc/controller/task/TaskController.java,18 方法)FamilyUserController(cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyUserController.java,17 方法)AdminInventoryController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminInventoryController.java,16 方法)FamilyInviteController(cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyInviteController.java,15 方法)OrchestrationController(cfc-backend/src/main/java/com/etotem/cfc/controller/OrchestrationController.java,15 方法)KeyPersonController(cfc-backend/src/main/java/com/etotem/cfc/controller/KeyPersonController.java,14 方法)AdminCouponController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminCouponController.java,12 方法)SupplySystemController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SupplySystemController.java,12 方法)BadgeController(cfc-backend/src/main/java/com/etotem/cfc/controller/BadgeController.java,11 方法)SupplyHierarchyController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SupplyHierarchyController.java,11 方法)TrainingPlanController(cfc-backend/src/main/java/com/etotem/cfc/controller/guide/TrainingPlanController.java,11 方法)AdminGuideController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminGuideController.java,10 方法)CouponController(cfc-backend/src/main/java/com/etotem/cfc/controller/CouponController.java,10 方法)GuideController(cfc-backend/src/main/java/com/etotem/cfc/controller/guide/GuideController.java,10 方法)ProcurementTaskController(cfc-backend/src/main/java/com/etotem/cfc/controller/product/ProcurementTaskController.java,10 方法)TaskTemplatePackageController(cfc-backend/src/main/java/com/etotem/cfc/controller/TaskTemplatePackageController.java,10 方法)TeacherController(cfc-backend/src/main/java/com/etotem/cfc/controller/guide/TeacherController.java,10 方法)UserController(cfc-backend/src/main/java/com/etotem/cfc/controller/UserController.java,10 方法)AdminButlerController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminButlerController.java,9 方法)FamilyMembersController(cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyMembersController.java,9 方法)FileRecordController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/FileRecordController.java,9 方法)GutHealthProjectController(cfc-backend/src/main/java/com/etotem/cfc/controller/GutHealthProjectController.java,9 方法)KnowledgeBaseController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/KnowledgeBaseController.java,9 方法)MarketController(cfc-backend/src/main/java/com/etotem/cfc/controller/MarketController.java,9 方法)PearlController(cfc-backend/src/main/java/com/etotem/cfc/controller/PearlController.java,9 方法)PpointConfigAdminController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/PpointConfigAdminController.java,9 方法)AdminActivityController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminActivityController.java,8 方法)AdminAuthController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminAuthController.java,8 方法)ArticleCommentController(cfc-backend/src/main/java/com/etotem/cfc/controller/content/ArticleCommentController.java,8 方法)ContactController(cfc-backend/src/main/java/com/etotem/cfc/controller/ContactController.java,8 方法)DanReportController(cfc-backend/src/main/java/com/etotem/cfc/controller/DanReportController.java,8 方法)FamilyChallengeController(cfc-backend/src/main/java/com/etotem/cfc/controller/FamilyChallengeController.java,8 方法)PurchaseController(cfc-backend/src/main/java/com/etotem/cfc/controller/PurchaseController.java,8 方法)SupplyManageController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SupplyManageController.java,8 方法)SysMenuController(cfc-backend/src/main/java/com/etotem/cfc/controller/admin/SysMenuController.java,8 方法)TaskReminderController(cfc-backend/src/main/java/com/etotem/cfc/controller/task/TaskReminderController.java,8 方法)这些控制器已有测试但只覆盖了部分方法——即「已经做了一部分测试的情况,要能够找到」。
HealthKnowledgeBaseController:覆盖 1/28,未覆盖:batchQuery、list、add、update、delete、importKnowledgeBase、queryBacteria、batchQueryBacteria、queryIndicator、queryFoodProductOrderController:覆盖 7/19,未覆盖:myOrderCounts、vendorConfirm、reviewUpdate、ship、applyRefund、handlePaymentSuccess、notify、activityAudit、activitySignIn、activityCompleteAuthController:覆盖 14/18,未覆盖:setSwitchPassword、verifyToken、ssoTicket、ssoLoginGuideManagementController:覆盖 3/17,未覆盖:resubmitApplication、getUserApplications、getApplicationRecords、generateInviteCode、getInviteCodes、validateInviteCode、getChildGuides、getAllChildGuides、getParentGuide、getGuidePackageTemplatesMembershipController:覆盖 4/17,未覆盖:getAllLevels、getMyMembership、getUpgradeRecords、upgradeOrder、activateTrial、createOrder、continueOrder、getPricingPlans、getMembershipCompare、paymentNotifyArticleController:覆盖 4/16,未覆盖:relatedProducts、related、relatedByProduct、getArticleAudio、reportReadingTime、readingStats、dailyTip、aiQuestions、submitAnswers、publishCircleController:覆盖 1/16,未覆盖:myCircles、discover、join、leave、create、update、pendingMembers、approve、feed、multiFeedReportParserAdminController:覆盖 1/15,未覆盖:listTypes、toggleType、deleteType、listFingerprints、saveFingerprint、deleteFingerprint、listImports、uploadImport、approveImport、rejectImportActivityController:覆盖 6/13,未覆盖:submitReview、register、cancelRegistration、myRegistrations、registrationRoster、checkin、checkinReviewCommissionController:覆盖 1/13,未覆盖:list、team、stats、balance、teamList、funnel、teamConsumption、myReferrer、teamTree、teamGrowthCurveGrowthRecordController:覆盖 4/13,未覆盖:getRecordList、getChildRecords、getRecordDetail、deleteRecord、syncExternalResult、createFromUpload、createSupplement、checkDuplicate、getSupplementsHealthPlanController:覆盖 1/13,未覆盖:generate、regenerateSection、save、confirm、list、detail、planTasks、availableTeachers、listPendingReview、updatePlanStatsController:覆盖 4/12,未覆盖:getDashboardSummary、getRevenueStats、getMembershipStats、childOverview、familySummary、pointsRanking、getTrafficAnalytics、recordProductViewWishController:覆盖 11/12,未覆盖:priceAliasPaymentController:覆盖 5/11,未覆盖:createWechatNativePay、getPaymentStatus、getOAuth2Url、oauth2Callback、handleV3Notify、generateQrCodeAdminVirtualTeamController:覆盖 1/10,未覆盖:list、create、update、toggle、addMember、removeMember、updateMember、userTeams、treeGuideFamilyTaskController:覆盖 8/10,未覆盖:unbindFamily、getDashboardStatsSubscriptionController:覆盖 1/10,未覆盖:getPlans、createOrder、subscribe、cancel、setAutoRenew、getMyBenefits、checkBenefit、getTier、updateTierAIChatController:覆盖 3/9,未覆盖:reportAnalyze、deleteConversation、sendNutritionMessage、sendHealthCoachMessage、sendHealthButlerMessage、transcribeAdminProductController:覆盖 1/9,未覆盖:list、review、shelve、detail、create、update、copy、deleteEnergyController:覆盖 5/9,未覆盖:configureSourceRatios、getScoreHistory、getFamilyScoreHistory、getWealthDetailFiveDimensionSelfCheckController:覆盖 3/9,未覆盖:submit、getHistory、ignoreSelfCheck、generatePlan、getTrendAnalysis、aiGenerateQuestionsProductController:覆盖 6/9,未覆盖:updateImages、specMap、relatedProductsCognitiveController:覆盖 1/8,未覆盖:getChildCognitiveScores、getFamilyCognitiveScores、updateCognitiveScore、getRecommendations、createTaskFromRecommendation、getNorms、submitSelfTestGuideTeamController:覆盖 6/8,未覆盖:checkStatus、leaveTeamDoaController:覆盖 1/7,未覆盖:createStage、stageDetail、cancelStage、submitPlan、submitReview、weekListEmotionCheckinController:覆盖 2/7,未覆盖:create、list、stats、weeklyReport、recognizeEmotionAdminEnergyConfigController:覆盖 1/6,未覆盖:sourceList、sourceSave、sourceDelete、dailyLimits、dailyLimitSaveAdminGuidePopupController:覆盖 1/6,未覆盖:list、create、update、delete、statsAdminPlannerExamController:覆盖 1/6,未覆盖:papers、createPaper、updatePaper、deletePaper、saveQuestionsAdminSpecialPriceController:覆盖 4/6,未覆盖:list、updateButlerController:覆盖 1/6,未覆盖:apply、getProfile、updateProfile、getServiceRecords、getCommissionsFoodRecommendController:覆盖 2/6,未覆盖:getIndex、getHistory、getByFamily、getCautionFoodsIndicatorController:覆盖 2/6,未覆盖:quickLookup、sourceTypes、periods、correlationListActivityOrderController:覆盖 1/5,未覆盖:create、pay、handlePaymentSuccess、notifyAdminCommissionConfigController:覆盖 1/5,未覆盖:getConfig、updateConfig、settle、refundAdminOrgStatsController:覆盖 2/5,未覆盖:families、active、revenueDailyCheckinController:覆盖 4/5,未覆盖:detailGameRecordController:覆盖 1/5,未覆盖:getHistory、getBestScores、getStats、getLeaderboardHealthDimensionController:覆盖 4/5,未覆盖:radarDatapython3 tdd-orchestrator/scripts/discover_tests.py --project <repo> --out docs/tdd/test/discovery.mddiscovery.md 均为只读扫描产物,不改动任何源码。tests/ 目录 · 标注来源)此前仅扫了
cfc-backend/src/test/java,漏掉了仓库根tests/下的一整套测试资产。 现已由tdd-orchestrator/scripts/test_inventory.py全源编目,产出docs/tdd/test/inventory.md。
tests/test-cases/*.md:678 条(TC-A-01 等全局唯一编号,正常流/异常流/权限流三类),每条自带 对应 e2e 与 关联需求/设计(控制器);来源锚点 = tests/test-cases/<文件>.md#<TC编号>。tests/**/*.spec.js:70 文件 / 411 用例(e2e + integration + api 冒烟)。cfc-langgraph/tests + tools/xaf_agent_hub/tests:12 文件 / 55 用例。cfc-backend/src/test/java:182 文件 / 1371 @Test(方法级覆盖见 discovery.md)。tests/user-scenarios/*.md:8 文件(上游输入,201 个场景 SC-角色-NN)。进度不写回 tests/ 与 cfc-backend/src/test/java 下的原始测试文件,而是落在本地侧车 .tdd/test-progress.json(与 config.json 同目录,本地不推送):
// .tdd/test-progress.json
{ "schema": "tdd-test-progress/v1",
"sources": [ { "anchor", "source_type", "source_path", "local_id", ...meta }, ... ],
"progress": { "<anchor>": { "status":"pass|fail|executed|blocked|untracked", "at":ISO, "by":"", "note":"" } } }
anchor = source_path#local_id(如 tests/test-cases/admin.md#TC-A-01、tests/e2e/admin-panel.spec.js#<用例标题>、cfc-langgraph/tests/test_intent.py#test_classify_chat)。progress[anchor];原始 .md/.spec.js/.py 一律不动,原项目结构零侵入。test_inventory.py --emit-progress 可(重新)播种 anchors(保留已有 progress)。若需团队共享进度,可将该侧车移到 docs/tdd/ 并推送(默认留本地,呼应 config 本地化约定)。