On 1/13/16 5:46 PM, Gilles wrote:
> Hi.
>
> There are several problems.
>
> There is a "protected" field ("generator").
>
> There is a no-arg constructor that calls a overridable method
> ("makeGenerator()"). But the method is thus is called *before*
> the subclass's constructor has run.
>
> That method initializes the "generator" field. If the object
> returned by "makeGenerator()" needs initialization (performed by
> its constructor), the returned instance will be invalid or "null"
> or the call might just fail (raising an exception) in the attempt
> to construct a generator instance with missing data.
>
> This invalid object is then passed on to the constructor of
> "RandomDataGenerator".
>
> But "RandomDataGenerator" is a smart class: if the RNG is null,
> it will create one and all the tests will still work; but they
> won't use have used the RNG supposedly under test.
>
> There are "@Before"-annotated methods, but it is not clear that
> they are necessary. In "RandomGeneratorAbstractTest", it partly
> duplicates initialization performed by the constructor.
>
> A number of test methods defined in "RandomDataGeneratorTest"
> are overridden in "RandomGeneratorAbstractTest" in order to do
> nothing; yet they are counted as "passed" in Junit's output.
>
> Unit test "testSeeding" rely on an undefined behaviour in that
> "makeGenerator()" will return a different instance at each call.
>
> Reusing the same "generator" instance in several test is
> deceiving, as Junit instantiates the class for each "@Test"
> method.
>
> All in all, I think that:
> 1. The "protected" instance variables should be abandoned.
+1
> 2. The testing for "RandomDataGenerator" should be separate
> from the testing of the RNGs.
+1
The key thing to make sure of is that the tests use fixed seeds.
Otherwise, we will see lots of transient failures.
Phil
>
>
> Gilles
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]