On Thu, 14 Jun 2007, Daniel John Debrunner wrote:

Ravinder Reddy wrote:

    dear all,
I've been working on lang/declareGlobalTempTable.java for converting it into
junit.I have atttched the first patch to the issue (DERBY-2750).
This is the my First JUnit TestCase that I have ever written. I am requesting you to help me in enhancing my skills by reviewing my patch. I have used only one Assertion Method (assertTrue()) and I have put all the tests (around 50) in one fixture.I am getting some problems in running the test case in linux(eclipse) but able to create patch using eclipse. As it is my first fixture , I think there is a great possibility of learning more.

I would spend some time looking at the existing JUnit tests, eg. any class that extends for BaseJDBCTestCase.

A lot of utility methods have been added to keep tests as clean and simple as possible, thus allowing the reader to focus on what is being tested.

For example the use of a 'passed' variable and asserting it to be true only at the end of the fixture is not a common pattern in Junit. Typically assertions are in line, the first failure fails the fixture. Catching exceptions tends to be somewhat uncommon, thanks to various utility methods, and if the fixture throws an exception the test will fail.

BaseJDBCTestCase is written to allow the common case of a test fixture needing a single connection to be written easily. Thus one doesn't (in that case) need to have any fields in the test class to hold a connection, the parent class does this. That connection is available using getConnection(), this means your code here:

+       protected void setUp() throws Exception {
+               super.setUp();
+               con1 = getConnection();
+               con2 = getConnection();

is not doing what you think it is, but it is doing what the javadoc for getConnection() says. That is getConnection() returns the same connection object, thus con1 and con2 refer to the same object.

In fact I would say fields in JUnit classes tend to be rare, this is because they are not of much benefit. Each fixture when run is a separate instance of the class, thus if you have twenty fixtures putting the connection/statement in a field doesn't mean you have one connection/statement for all the fixtures, each fixture will create its own connection in its own instance field. This since such fields are only used by a fixture, it makes more sense just to hold the state as a local variable in that fixture.

It may also be worth creating a new class for the JUnit version of the test. This allows two things:
 1) The test name can follow the JUnit pattern of xxxxTest.java
2) You don't have to convert the old test in one go. You can get one (or a small number) fixture working in the new class, submit that, get reviews and thus learn before having to convert a full test.
 3) It's easier to review :-)

Thanks for working on this.
Dan.


        Thank You Dan for your valuable comments/suggestions.
         Upon careful Observation of Existing JUnit tests I came to know that
many tests are using SQLState for asserting.For this we should know the SQLState codes to compare with the Expected SQLState code in any assertion.
n e way From where can I get The List of SQLState codes.



Thank You.
--
******************************************************************************

   Every problem that has been solved can be solved again in a better way

                                                  - Ravinder Reddy

*******************************************************************************


--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Reply via email to