そこで、AutoCAD 2005 用のプログラムをいくつか開発してきましたが、常に問題に直面していました。具体的には、絶対角度 (「方位角」) に基づいて線を描画する必要があるプログラムに取り組んでいました。距離、特別な入力形式から度、ラジアン、およびその逆への変換、および他の多くのプログラマーと同様に、私のコードは特にかさばり、バグが多くなりました。約 3 ~ 4 日かかるはずのプログラム/スクリプトで、ほぼ 1 週間半も立ち往生してしまいました。
開発をよりスムーズにするためのテスト フレームワークを実装することを考えていましたが、他の言語とは異なり、そのためのライブラリがまったくないと思われる言語で作業しており、さらに良いことに、それは埋め込みスクリプト環境です。
設計がどのように機能するかについていくつかのアイデアがありますが、いくつか説明する必要があります。
コマンドの実行/AutoLISP バックグラウンド
私が書くプログラムのほとんどは、シェルによく似たコンソールのようなコマンドの形式になっています。たとえば、 function を書くとしますx
。AutoLISP では、次のように表されます (スラッシュも文字通りそこにあります): (defun x (arguments / local variables) body of function)
. コンソールに公開するには、名前を から に変更する必要がありx
ますC:x
。
そのため、ほとんどのテストはコンソールから直接行う必要があります。私は AutoCAD に組み込まれている Visual Lisp エディタを避ける傾向があります。これは、プログラムが使用される可能性が最も高い実際の作業環境から切り離されているように思われ、実際のデバッガがないように思われるためです。そのため、コードをデバッグするために、または他の方法を頻繁に使用する必要があります。(print "string")
アイデア/考え/質問
1. テスト フレームワーク用に公開したい関数の種類は? コンパイル時のテスト、アサート、Java のテスト クラスなど、複数のパラダイムについて聞いたことがあります。アサートをコーディングしてみる必要がありますか? おそらく、リフレクションを使用したテストを作成する必要がありますか?
2. テストを挿入する方法と場所は? 別の関数を作成し、すべてのローカル変数をグローバルに変更して、可能なテスト コンテキストに公開することを考えましたが、これをどのように実行したいかはまだわかりません。AutoLISP には通常の Lisp マクロが欠けていると思いますが、それでも非常に優れたリフレクション機能を備えていると思います。そのため、実際にコンソールにコマンドを入力して何かを実行することは可能です。外部の非侵入型フレームワークが最も理にかなっていると思いますが、これについてはより経験豊富な回答を得たいと思います。