The problem seems to be Phexample. There is an implementation of
Given>>#consumeReturnValueAt: testMethod
^(cache includesKey: testMethod)
ifTrue: [ cache removeKey: testMethod ]
ifFalse: [ |ret|
testMethod setUp.
ret := testMethod perform: testMethod selector.
testMethod tearDown.
ret
]
that caches test executions. I don't know why it does this and I don't know why
an existing key is removed. But in my case I have tests with side effects while
storing objects in MongoDB. The DB is properly reseted at the beginning of a
test and if a cached test is not executed the necessary state is not produced.
I'm not sure what exactly triggers the problem. It is probably the way how I
use Phexample. I do a lot of
MyTestCase new given: #anotherStateProducingTest
because I cannot align the inheritance chain in parallel to the state needs to
be there (and Given is used as a singleton). This is a Phexample problem IMHO.
I really like Phexample because state preparation is often something that is
annoying while writing tests. On the other hand your tests become a database of
test execution state. The management of that state is not properly solved and
only works in the simple cases as expected.
Norbert
Am 23.06.2014 um 14:32 schrieb Norbert Hartl <[email protected]>:
> I use Sunit + Phexample in my project. The model uses a dynamic variable. In
> order to ease the writing of tests I implemented in my TestCase
>
> IAMModelTests>>#runCase
>
> self createContext do: [ super runCase ]
>
> with
>
> IAMContext>>#do: aBlock
> ^ IAMCurrentContext
> value: self
> during: aBlock
>
> It works basically. The method #runCase is only execute once. The #given:
> calls inside a test method do not trigger further runCase executions. The
> strange thing is that all tests succeed when I run them alone e.g. in
> Nautilus. Whenever I run the tests via the testrunner 2 tests fail. Those 2
> tests are not any more special than the other tests. And they fail reliably.
>
> Does anyone has a hint what is different when being run in testrunner. I
> cannot debug the problem easily because then I would run the test alone and
> it will succeed.
>
> thanks,
>
> Norbert
>
>