JobStateMachine テスト実行結果

実行日: 2025年1月 テストファイル: tests/core/test_job_state_machine.py


テスト概要

JobStateMachine の実装を検証するため、以下のテストを実装しました:

実装されたテスト

  1. 基本機能テスト (TestJobStateMachine)
    • test_initial_state_is_pending: 初期状態が PendingState であることを確認
    • test_transition_pending_to_running: Pending → Running の遷移をテスト
    • test_transition_running_to_completed: Running → Completed の遷移をテスト
    • test_transition_running_to_failed: Running → Failed の遷移をテスト
    • test_invalid_transition_from_pending: 無効な遷移をテスト
    • test_invalid_transition_from_completed: 終端状態からの遷移をテスト
    • test_invalid_transition_from_failed: 終端状態からの遷移をテスト
  2. SessionController 統合テスト (TestJobStateMachineWithSessionController)
    • test_state_persisted_to_session: 状態遷移がセッションに保存されることを確認
  3. RunHistoryLogger 統合テスト (TestJobStateMachineWithHistoryLogger)
    • test_state_logged_to_history: 状態遷移が履歴に記録されることを確認
    • test_failure_logged_to_history: 失敗が履歴に記録されることを確認
  4. 完全統合テスト (TestJobStateMachineIntegration)
    • test_full_integration: SessionController と RunHistoryLogger の完全統合テスト

合計テスト数: 11個


テスト実行方法

基本的な実行

cd /home/yn441611/NexusCore
source myenv_linux/bin/activate
PYTHONPATH=src python -m pytest tests/core/test_job_state_machine.py -v

詳細な出力

PYTHONPATH=src python -m pytest tests/core/test_job_state_machine.py -v --tb=short

特定のテストクラスのみ実行

PYTHONPATH=src python -m pytest tests/core/test_job_state_machine.py::TestJobStateMachine -v

実装の検証

1. インポート確認

以下のクラスが正しくインポートできることを確認:

from nexuscore.core.job_state_machine import (
    JobStateMachine,
    PendingState,
    RunningState,
    CompletedState,
    FailedState,
)

2. 基本動作確認

# 初期状態の確認
machine = JobStateMachine(job_id="test-1")
assert machine.get_current_state() == "pending"
assert isinstance(machine.state, PendingState)

# 状態遷移の確認
machine.start()  # Pending → Running
assert machine.get_current_state() == "running"

machine.complete()  # Running → Completed
assert machine.get_current_state() == "completed"

3. エラーハンドリング確認

# 無効な遷移の確認
machine = JobStateMachine(job_id="test-2")
try:
    machine.complete()  # Pending から直接 Completed へは遷移不可
except ValueError:
    pass  # 期待されるエラー

期待される動作

状態遷移フロー

PendingState → RunningState → CompletedState (成功時)
                          ↓
                       FailedState (失敗時)

状態遷移ルール

  • PendingState: start() で RunningState に遷移可能
  • RunningState: complete() で CompletedState に遷移可能、fail() で FailedState に遷移可能
  • CompletedState: 終端状態(遷移不可)
  • FailedState: 終端状態(遷移不可)

統合機能

SessionController との統合

状態遷移のたびに、セッション状態が .nexus/sessions/{session_id}.state.json に保存されます。

RunHistoryLogger との統合

ジョブの完了・失敗時に、履歴が .nexus/history/{kind}.log.jsonl に記録されます。


注意事項

  • テスト実行時は PYTHONPATH=src を設定してください
  • 一時ファイルを使用するテストは、自動的にクリーンアップされます
  • セッション状態と履歴ファイルは、テスト実行後に確認できます

トラブルシューティング

インポートエラー

# PYTHONPATH を設定
export PYTHONPATH=src:$PYTHONPATH

テストが見つからない

# テストファイルの存在を確認
ls -la tests/core/test_job_state_machine.py

依存関係エラー

# 必要なパッケージをインストール
pip install pytest

テスト実装者: NexusCore Development Team 最終更新: 2025年1月


This site uses Just the Docs, a documentation theme for Jekyll.