0

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のバグだと思います。

4

1 に答える 1