pytest を使用していくつかの単体テストを作成した pyclips / clips プログラムがあります。各テスト ケースには、イニシャルが含まclips.Clear()
れ、その後に を介して実際のクリップ COOL コードが実行されますclips.Load(rule_file.clp)
。各テストを個別に実行すると正常に動作します。
それでも、pytest にすべてのテストを実行するように指示すると、一部はClipsError: S03: environment could not be cleared
. 実際、.py ファイル内のテストの順序によって異なります。後続のテスト ケースが例外をスローする原因となるテスト ケースがあるようです。
クリアが失敗するように、いくつかのクリップ コードがまだ「使用中」である可能性がありますか? 私はここでそれを読みました(clear)
CLIPS をクリアします。CLIPS 環境からすべての構成要素と関連するすべてのデータ構造 (ファクトやインスタンスなど) を削除します。クリアはいつでも安全に実行できますが、特定の構造は使用中に削除することができません。
これはここに当てはまりますか?(clear)
コマンドが失敗する原因は何ですか?
編集:
問題を絞り込むことができました。これは、次の状況で発生します。
test_case_A は test_case_B の直前に来ます。test_case_A には次のtest
ようなものがあります
(test (eq (type ?f_bio_puts) clips_FUNCTION))
しかし、f_bio_puts
に設定されています
(slot f_bio_puts (default [nil]))
したがって、[nil]
最初に設定されているスロット変数のタイプをテストすると、(clear)
コマンドが失敗するようです。何か案は?
編集2
何が問題を引き起こしているのかを知っていると思います。test
ラインです。クリップ ダイアログ ウィンドウで実行できるようにコードを調整しました。そして、経由でロードするときにこのエラーが発生しました(batch ...)
[INSFUN2] No such instance nil in function type.
[DRIVE1] This error occurred in the join network
Problem resided in associated join
Of pattern #1 in rule part_1
これがマスクされているのはpyclipsのバグだと思います。