> In Java I'd just have an interface
> with two implementations, and bootstrap the tests with a different
> implementation, in clojure I guess I'd do something like:
> (in-ns `some.thing)
> (defn foo [] nil)
> or something?
That would consitute a root binding because of the 'defn, but you need
a dynamic rebinding. This is what you can use:
(binding [existing-function (fn [a b] ...)]
;; your tests here
)
For mocking java interfaces and classes I'm quite happy with Mockito
[1], even though it's usage doesn't look always intuitive in clojure.
This is an example for mock-testing a hadoop map function.
(defn mock [#^Class class]
(. Mockito mock class))
(defn mock-output []
(mock OutputCollector))
(defn mock-mapper []
(mock namespace.surveyed-users-mapper0))
(defn mock-reducer []
(mock namespace.surveyed-users-reducer0))
(defn mock-reporter []
(mock Reporter))
(defn mock-conf []
(mock JobConf))
(defn mock-filesystem []
(mock FileSystem))
(defn verify
([mock]
(. Mockito verify mock))
([mock mode]
(. Mockito verify mock mode)))
(defn stub [mock]
(. Mockito when mock))
(deftest mapper0-map-click-test
(let [output (mock-output)
mapper (mock-mapper)
key (to-key nil)
value (Text. (tab "9900" "550" "990" "4040" "1" "3"))
reporter (mock-reporter)]
(doto (stub (.getState mapper))
(.thenReturn (ref {:network "9900"
:input-file-name
"/path/clicks/week/33/result/part-00000"
:pagerules-table {"4040" ["1" "2" "3"]}})))
(mapper0-map mapper key value output reporter)
(verify output)
(.collect output (Text. "550") (Text. "0\t1,2,3"))))
You need to import all the unqualified classes used here, of course.
Florian
[1] http://mockito.org/
--
Florian Ebeling
[email protected]
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---