[ http://issues.apache.org/jira/browse/DERBY-919?page=all ]

Kristian Waagan updated DERBY-919:
----------------------------------

    Attachment: BasicDerbyJUnitTest.java
                BasicDerbyJUnitTestTest.java
                BasicDerbyJUnitTest.html

In my opinion DerbyJUnitTest does not provide the most basic feature a JUnit 
test needs in a proper way - to obtain a connection to some database. The 
critical point is the need to call methods in a specific order for 
getConnection to work (not to get NullPointerExceptions).

Therefore I tried to write my own version of it, mostly to capture 
requirements. I have commented the file pretty well, but I'm sure there are 
still areas where it does not explain enough. Also, there will be lacking 
functionality regarding obtaining a connection, I would appreciate people 
telling if they miss something (see also the questions further down). I also 
wrote a simple test, which I hope demonstrate how BasicDerbyJUnitTest is 
intended to be used. Most notably, it adapts to the settings set by our 
existing test harness.

DerbyJUnitTest has a lot more functionality than BasicDerbyJunitTest, and I 
propose to somehow separate most/all the utility methods from the content of 
BasicDerbyJUnitTest to avoid cluttering the class with a lot of unrelated 
functionality. This can be done either by inserting a new class in the 
inheritance chain, or by creating a(nother) utility class. I do mean that the 
utility methods existing today in DerbyJUnitTest is useful.

Questions regarding BasicDerbyJUnitTest:
a) Do we need to be able to get specific DataSource implementations, like 
EmbeddedSimple-, *ConnectionPool*- and *XADataSource?
(functionality for specifying properties for DataSource connections is not yet 
implemented)
b) Should environment/version information (JVM, OS, maybe hardware) be 
available in/through BasicDerbyJUniTest?

Questions regarding actions for JUnit infrastructure:
1) Is it okay to add yet another way to get connections?
2) I might be able to hack DerbyJUnitTest to work in a similar way as 
BasicDerbyJUnitTest, but it is complicated by dependencies to existing tests. 
Also, it will not be a very clean solution. Is this still something we want to 
do?
3) TestUtil is also used to get connections. It might also be possible to make 
this work as BasicDerbyJunitTest, but then there is no reason to use 
(Basic)DerbyJUnitTest to get connections for JUnit tests. Note that some 
methods, for instance TestUtil.getConnection(), is broken.

Feedback appreciated!

> improve pattern for setting up junit tests
> ------------------------------------------
>
>          Key: DERBY-919
>          URL: http://issues.apache.org/jira/browse/DERBY-919
>      Project: Derby
>         Type: Sub-task
>   Components: Test
>  Environment: All
>     Reporter: Andreas Korneliussen
>  Attachments: BasicDerbyJUnitTest.html, BasicDerbyJUnitTest.java, 
> BasicDerbyJUnitTestTest.java
>
> The current junit tests cannot be run directly from the java.ui.textrunner by 
> i.e using:
> java junit.textui.TestRunner 
> org.apache.derbyTesting.functionTests.tests.junitTests.lang.BooleanTest
> .E
> Time: 0.008
> There was 1 error:
> 1) 
> testBoolean(org.apache.derbyTesting.functionTests.tests.junitTests.lang.BooleanTest)java.lang.NullPointerException
>         at 
> org.apache.derbyTesting.functionTests.util.DerbyJUnitTest.faultInDriver(DerbyJUnitTest.java:317)
>         at 
> org.apache.derbyTesting.functionTests.util.DerbyJUnitTest.getConnection(DerbyJUnitTest.java:345)
>         at 
> org.apache.derbyTesting.functionTests.util.DerbyJUnitTest.getConnection(DerbyJUnitTest.java:335)
>         at 
> org.apache.derbyTesting.functionTests.tests.junitTests.lang.BooleanTest.testBoolean(BooleanTest.java:136)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> FAILURES!!!
> Tests run: 1,  Failures: 0,  Errors: 1
> The reason is that the tests needs to have some fixture being set up before 
> the test can run, and that this is currently supported by calling a bunch of 
> static methods in the correct order to initialize some static members of 
> DerbyJUnitTest.
> The proposed alternative is that the added fixture is set up in the suite() 
> method, which is used by JUnit to get the Test object to be run.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to