4

:pre私は自分と条件の単体テストを作成しようとして:postいますが、最初に考えたのはこれを行うことでした。

(ns myproj.battle-test
  (:use clojure.test
        myproj.battle))

(deftest lose-only-positive-amount-of-health
  (let [actor {:health 100}]
    (is (thrown? AssertionException
          (:health (lose-health actor -5))))))

AssertionExceptionしかし、テストファイルから参照する方法を理解できず、代わりに例外を取得します。

java.lang.IllegalArgumentException: Unable to resolve classname: AssertionException

私はさまざまなことを試しましたが(おそらくこれはあまりにも単純な質問であるため、Googleは役に立ちませんでした)、運がなかったので、それAssertionExceptionがスローされたことを確認するにはどうすればよいですか?

これは非常に初心者の質問だと思います。これらはClojureの最初の数行です:)

4

1 に答える 1

4

例外はクラスなので、インポートするだけです。

(ns myproj.battle-test
  (:use clojure.test
        myproj.battle)
  (:import a.package.which.contains.AssertionException))
...

上記のコードのAssertionException代わりに、(どのパッケージ内の)場所を見つけて置き換えます。a.package.which.contains

または、上記の句のように、代わりにフルネームを使用することもできます:importが、クラスを使用する場所が複数ある場合、これは面倒な場合があります。

UPD。私が間違えました。そのようなクラスはありません、AssertionException。クラスがあり、パッケージAssertionError内にあるため、java.lang自動的にインポートされます。Clojureのpre/post条件はそれをスローするので、AssertionErrorの代わりに使用するだけAssertionExceptionで、コードは正常に実行されます。

于 2012-08-14T16:59:28.533 に答える