When a namespace is reloaded any vars defined in it are re-evaluated. In
your case it would seem that some quirk of the Leiningen test architecture
is leading to vartest.test-data being loaded twice.

In general namespaces should be robust when it comes to being reloaded.
Clojure provides a macro, defonce, for variables you only want defined once
across reloads. Using defonce in your test-data namespace should solve your
problem.

- James


On 30 April 2014 07:29, Antti Karanta <antti.kara...@gmail.com> wrote:

>
>
> I thought that once defined clojure vars are immutable and retain their
> values. However, I
> accidentally bumped into a situation where I observe the same var in two
> different states.
> Here's how to reproduce:
>
> lein new app vartest
>
> Add the following files to the test folder:
>
> -----
>
> (ns vartest.test-data)
>
> (def uuid (java.util.UUID/randomUUID))
>
> -----
>
> (ns vartest.core-test
>   (:require [clojure.test :refer :all]
>             [vartest.test-data :as td]))
>
> (def my-uuid td/uuid)
>
> (deftest a-test
>   (testing "accessing same var twice"
>     (is (= my-uuid td/uuid))))
>
> ----
>
> Now run the tests:
>
> C:\temp\vartest>lein test :all
>
> lein test vartest.core-test
>
> lein test :only vartest.core-test/a-test
>
> FAIL in (a-test) (core_test.clj:9)
> accessing same var twice
> expected: (= my-uuid td/uuid)
>   actual: (not (= #uuid "030d2fe8-407b-4d67-a505-261bc3650729" #uuid
> "f8405611-e2da-4dd2-973b-508831
> 27ef6a"))
>
> lein test vartest.test-data
>
> Ran 1 tests containing 1 assertions.
> 1 failures, 0 errors.
> Tests failed.
>
> However, if I run
>
> lein test :only vartest.core-test/a-test
>
> then the very same test passes.
>
> What's going on here?
>
> Environment: Clojure 1.5.1 and 1.6.0, Leiningen 2.3.4, Java 1.7.0_51
> 64-Bit, Windows 7 64-bit
>
>
>       ::Antti::
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to