assertTrue( $context->isSuccess(), $message ?: "期望流程成功,实际失败。语音: {$context->getFullVoice()}" ); } /** * 断言流程执行失败 */ protected function assertFailure(ProcessContext $context, string $message = ''): void { $this->assertFalse( $context->isSuccess(), $message ?: "期望流程失败,实际成功。步骤: {$context->getCurrentStep()}" ); } /** * 断言当前步骤 */ protected function assertStep(ProcessContext $context, string $expectedStep, string $message = ''): void { $this->assertEquals( $expectedStep, $context->getCurrentStep(), $message ?: "期望步骤为 {$expectedStep},实际为 {$context->getCurrentStep()}" ); } /** * 断言语音包含指定内容 */ protected function assertVoiceContains(ProcessContext $context, string $expected, string $message = ''): void { $voice = $context->getFullVoice(); $this->assertStringContainsString( $expected, $voice, $message ?: "期望语音包含 '{$expected}',实际语音: {$voice}" ); } /** * 断言语音不包含指定内容 */ protected function assertVoiceNotContains(ProcessContext $context, string $unexpected, string $message = ''): void { $voice = $context->getFullVoice(); $this->assertStringNotContainsString( $unexpected, $voice, $message ?: "期望语音不包含 '{$unexpected}',实际语音: {$voice}" ); } /** * 断言语音等于指定内容 */ protected function assertVoiceEquals(ProcessContext $context, string $expected, string $message = ''): void { $this->assertEquals( $expected, $context->getFullVoice(), $message ?: "语音不匹配" ); } /** * 断言需要写库操作 */ protected function assertNeedDatabaseOperation(ProcessContext $context, string $message = ''): void { $this->assertTrue( $context->isDatabaseOperationNeeded(), $message ?: "期望需要写库操作,实际不需要" ); } /** * 断言不需要写库操作 */ protected function assertNoDatabaseOperation(ProcessContext $context, string $message = ''): void { $this->assertFalse( $context->isDatabaseOperationNeeded(), $message ?: "期望不需要写库操作,实际需要" ); } /** * 断言需要WebSocket通知 */ protected function assertNeedWebSocketNotify(ProcessContext $context, string $message = ''): void { $this->assertTrue( $context->isWebSocketNotifyNeeded(), $message ?: "期望需要WebSocket通知,实际不需要" ); } /** * 断言批次号不为空 */ protected function assertHasBatchNo(ProcessContext $context, string $message = ''): void { $this->assertNotEmpty( $context->getBatchNo(), $message ?: "期望有批次号,实际为空" ); } /** * 断言批次号相等 */ protected function assertBatchNoEquals(ProcessContext $context, string $expected, string $message = ''): void { $this->assertEquals( $expected, $context->getBatchNo(), $message ?: "批次号不匹配,期望: {$expected},实际: {$context->getBatchNo()}" ); } /** * 断言有操作员信息 */ protected function assertHasOperator(ProcessContext $context, string $message = ''): void { $this->assertTrue( $context->hasOperator(), $message ?: "期望有操作员信息,实际没有" ); } /** * 断言操作员名称 */ protected function assertOperatorName(ProcessContext $context, string $expected, string $message = ''): void { $this->assertEquals( $expected, $context->getOperator()->name, $message ?: "操作员名称不匹配" ); } /** * 断言内镜名称 */ protected function assertEndoscopeName(ProcessContext $context, string $expected, string $message = ''): void { $this->assertEquals( $expected, $context->getEndoscope()->name, $message ?: "内镜名称不匹配" ); } /** * 打印上下文信息(调试用) */ protected function dumpContext(ProcessContext $context): void { echo "\n=== Context Debug ===\n"; echo "Success: " . ($context->isSuccess() ? 'true' : 'false') . "\n"; echo "Step: " . $context->getCurrentStep() . "\n"; echo "Voice: " . $context->getFullVoice() . "\n"; echo "BatchNo: " . $context->getBatchNo() . "\n"; echo "Operator: " . $context->getOperator()->name . "\n"; echo "Endoscope: " . $context->getEndoscope()->name . "\n"; echo "Reader: " . $context->getReader()->type . "\n"; echo "NeedDB: " . ($context->isDatabaseOperationNeeded() ? 'true' : 'false') . "\n"; echo "===================\n"; } }