Hi Allen, Stu,
I guess my first inclination would be one of:
> 1) put the unit tests in the same file
using the with-test macro, or
> 2) put the unit tests in a separate file, in the same namespace
Stu's suggestion of with-ns would also work. But you don't even need
with-ns. You can refer a private function into the local namespace
like this:
(def private-function (ns-resolve 'other-namespace 'private-function))
You could even write a function that refers all the private symbols of
a namespace:
(defn refer-private [ns]
(doseq [[symbol var] (ns-interns ns)]
(when (:private (meta var))
(intern *ns* symbol var))))
This is slightly evil, and I would never recommend it for any purpose
except unit testing, but there it is.
-Stuart Sierra
On Wed, Jun 3, 2009 at 12:36 AM, Stuart Halloway
<[email protected]> wrote:
> Hi Allen,
>
> You could write a function that uses the clojure.contrib.with-ns/with-ns
> macro to dip into the namespace being tested and return the private
> function, assigning it to a local name in the test namespace.
>
> I need this too, and have been meaning to ping the other Stuart about either
> (a) adding something like this to test-is, or (b) creating a new
> test-helpers library in contrib that would include this function.
>
> Stu
>
>>
>> I have a namespace with some public functions, and some private
>> functions. I would like to write unit tests for the functions, and put
>> them in a separate file from the main name space. I would also like to
>> have an (ns) declaration in my tests file, because the tests require
>> several libraries. Of course, if I have private methods in namespace
>> A, I can't call them from namespace B. Right now, it seems I have
>> several options:
>>
>> 1) put the unit tests in the same file
>> 2) put the unit tests in a separate file, in the same namespace
>> 3) make the private functions public
>> 4) ???
>>
>> I don't really like the first three options. Ideally, the private
>> functions would remain private to every namespace except the testing
>> name space. Is there a good solution for this?
>>
>> Allen
>>
>> >>
>
>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---