pytestを使用して単体テストを書き込んだpyclips/clipsプログラムがあります。 各テストケースには、最初にclips.Clear()
が含まれ、続いてclips.Load(rule_file.clp)
によって実クリップCOOLコードが実行されます。各テストを個別に実行すると問題はありません。CLIPS(クリア)コマンドが失敗する/ pyclipsで例外がスローされる
しかし、すべてのテストを実行するようにpytestに指示すると、失敗するものはClipsError: S03: environment could not be cleared
で失敗します。実際、それは.pyファイル内のテストの順序に依存します。テストケースがあるようで、後続のテストケースで例外がスローされることがあります。
いくつかのクリップのコードはまだ「使用中」なので、クリアに失敗することがありますか? 私は(clear)
クリップをクリアしていることhereをお読みください。 CLIPS環境からすべての構造体および関連するすべてのデータ構造(ファクトおよびインスタンスなど)を削除します。クリアはいつでも安全に実行できますが、特定のコンストラクトは使用中に削除されません。
この場合もありますか? (clear)
コマンドが失敗する原因は何ですか?
EDIT:
私は問題を絞り込むことができました。次の状況で発生します。
test_case_Aはtest_case_Bの直前です。 test_case_Aで がかかる
(test (eq (type ?f_bio_puts) clips_FUNCTION))
としてtest
があるがf_bio_puts
だから最初[nil]
に設定されているスロット変数のタイプをテストする、ように見える
(slot f_bio_puts (default [nil]))
に設定されています(clear)
コマンドを失敗させます。何か案は?私は私が問題を引き起こしているものを知っていると思う
EDIT 2
。それはtest
行です。クリップのダイアログウィンドウでコードを実行するようにコードを修正しました。私はそれは、これがマスクされていることpyclipsのバグだと思い(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
を経由してロードするときに、私はこのエラーを得ました。
感謝。あなたの答えは、クリップにバグがあることを意味しますか?今後のバージョンで変更される予定ですか?それとも、これは設計上のこのようなものですか? – stackoverflowwww
これはバグです。 CLIPSをコマンドプロンプトと対話形式で使用している場合は、発行されたコマンドごとにエラーフラグが自動的にリセットされます。埋め込み時、個々のAPI呼び出しはエラーフラグをリセットする必要があります。これは次のリリースで修正される予定ですが、他のAPI呼び出しでこの問題が発生した場合は、エンベデッドコントローラをチェックするための追加コードなしでエラーフラグをリセットしてpyclips側で問題を修正することもできます。 –