You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by Daniel John Debrunner <dj...@apache.org> on 2006/08/15 21:07:13 UTC

[junit] Move JUnit base/utility classes???

Currently the JUnit base and utility classes are in this package:

org.apache.derbyTesting.functionTests.util

(See http://wiki.apache.org/db-derby/DerbyJUnitTesting)

I was wondering if they should be moved, for two reasons:

  1) That package is cluttered up with other stuff, it's more or less a
dumping ground. Utilites, JUnit base classes, "user level" classes for
procedures and vtis, etc.

  2) JUnit tests can be much more than funcional tests, e.g. having
system tests as JUnit tests would make them easy for everyone to run.

I was thinking of the following package:

org.apache.derbyTesting.junit

The package would be limited to base classes for JUnit tests and JUnit
related utilities such as the JDBC class. Classes for specific tests, or
those that implement Java procedures for tests etc. would not be allowed.

The functional tests would continue to live in their current location,
just that the super-class BaseJDBCTestCase would be in the new package.

Thoughts?
Dan.


Re: [junit] Move JUnit base/utility classes???

Posted by Kristian Waagan <Kr...@Sun.COM>.
Daniel John Debrunner wrote:
> Kristian Waagan wrote:
> 
>> Andreas Korneliussen wrote:
>>
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA1
>>>
>>> Kristian Waagan wrote:
>>> <>
>>>
>>>> Hi,
>>>>
>>>> I still have a question regarding the placement of JUnit tests. I have
>>>> brought this up before, but got very little response (I did get some,
>>>> see below).
>>>>
>>>> Do we want to support [unit] testing of package private classes?
>>>
>>> Maybe it is sufficient to support testing the public methods of public
>>> classes ?
>>
>> Hi Andreas,
>>
>> In my opinion, it is not.
>> There are some quite complex classes which are not part of the public
>> API. Testing these indirectly through the public API is a lot of work,
>> and it might be hard to construct all variations/codepaths.
> 
> I think Andreas meant testing a class through its public methods and
> interfaces, not Derby's public API. E.g. a module implementation can be
> tested through its api from org.apache.derby.iapi. That should be pretty
> direct testing that is able to cover all of the code in the module.
> 
> 
>> I recently experienced this problem. I "solved" it by writing my own
>> unit test and placing it in the appropriate package, which was not
>> contributed to the community. But maybe this is more of an exception
>> than the general case. The existing code base does not have this kind of
>> tests.
> 
> I must have missed this test being discussed on the list, can you
> provide a link to the archives so I can see the kind of issues you were
> hitting.
> 
>> If the consensus is not to support unit tests of this kind, I will
>> either write indirect tests instead or test less of the code. My worry
>> is the latter approach...
> 
> One argument could be that if you can't test a code through its public
> api then there is something wrong with the code, but maybe that's
> optimistic. That's why I'd like to see the example you hit.

Sorry for this short answer Dan.

I hope to write a better one tomorrow. Just to show that what I propose 
is not a new idea, I recommend people to read this entry in the JUnit FAQ:
http://junit.sourceforge.net/doc/faq/faq.htm#organize_1

I guess maybe I have formulated myself a little poorly.



Regards,
-- 
Kristian


> 
> Thanks,
> Dan.
> 


Re: [junit] Move JUnit base/utility classes???

Posted by Daniel John Debrunner <dj...@apache.org>.
Kristian Waagan wrote:

> Andreas Korneliussen wrote:
> 
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Kristian Waagan wrote:
>> <>
>>
>>> Hi,
>>>
>>> I still have a question regarding the placement of JUnit tests. I have
>>> brought this up before, but got very little response (I did get some,
>>> see below).
>>>
>>> Do we want to support [unit] testing of package private classes?
>>
>>
>> Maybe it is sufficient to support testing the public methods of public
>> classes ?
> 
> 
> Hi Andreas,
> 
> In my opinion, it is not.
> There are some quite complex classes which are not part of the public
> API. Testing these indirectly through the public API is a lot of work,
> and it might be hard to construct all variations/codepaths.

I think Andreas meant testing a class through its public methods and
interfaces, not Derby's public API. E.g. a module implementation can be
tested through its api from org.apache.derby.iapi. That should be pretty
direct testing that is able to cover all of the code in the module.


> I recently experienced this problem. I "solved" it by writing my own
> unit test and placing it in the appropriate package, which was not
> contributed to the community. But maybe this is more of an exception
> than the general case. The existing code base does not have this kind of
> tests.

I must have missed this test being discussed on the list, can you
provide a link to the archives so I can see the kind of issues you were
hitting.

> If the consensus is not to support unit tests of this kind, I will
> either write indirect tests instead or test less of the code. My worry
> is the latter approach...

One argument could be that if you can't test a code through its public
api then there is something wrong with the code, but maybe that's
optimistic. That's why I'd like to see the example you hit.

Thanks,
Dan.


Re: [junit] Move JUnit base/utility classes???

Posted by Kristian Waagan <Kr...@Sun.COM>.
Andreas Korneliussen wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Kristian Waagan wrote:
> <>
> 
>> Hi,
>>
>> I still have a question regarding the placement of JUnit tests. I have
>> brought this up before, but got very little response (I did get some,
>> see below).
>>
>> Do we want to support [unit] testing of package private classes?
> 
> Maybe it is sufficient to support testing the public methods of public
> classes ?

Hi Andreas,

In my opinion, it is not.
There are some quite complex classes which are not part of the public 
API. Testing these indirectly through the public API is a lot of work, 
and it might be hard to construct all variations/codepaths.

I recently experienced this problem. I "solved" it by writing my own 
unit test and placing it in the appropriate package, which was not 
contributed to the community. But maybe this is more of an exception 
than the general case. The existing code base does not have this kind of 
tests.

If the consensus is not to support unit tests of this kind, I will 
either write indirect tests instead or test less of the code. My worry 
is the latter approach...



-- 
Kristian

> 
>> The easiest solution to achieve this is to keep a mirrored/separate
>> source tree, where the tests are put into the corresponding Derby
>> production code package (for instance 'org.apache.derby.iapi.types').
>>
> 
> I think there are some testclasses which are in the same source tree as
> the derby source, however the .class files are packaged into
> dergbyTesting.jar.  I.e:  org/apache/derby/impl/drda/TestProto.class
> 
> 
>> Andrew brought up the concern wrt building and distribution. We do not
>> want to include the testing classes in the releases. Further, JAR
>> sealing is causing headaches (unable to distribute the test classes in a
>> separate JAR).
>>
> 
> Yes, and that is probably why derbynet's manifest has:
> 
> Name: org/apache/derby/impl/drda/
> Sealed: false
> 
> 
> Andreas
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.4 (SunOS)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
> 
> iD8DBQFE6vbY36DpyYjYNyIRArhHAJsE/FmJpRui8eGLjCGZR2RCj4DLIACeOmtf
> Vvr1uNT1BlAslq+Oahti3HI=
> =nXDM
> -----END PGP SIGNATURE-----


Re: [junit] Move JUnit base/utility classes???

Posted by Daniel John Debrunner <dj...@apache.org>.
Andreas Korneliussen wrote:

> I think there are some testclasses which are in the same source tree as
> the derby source, however the .class files are packaged into
> dergbyTesting.jar.  I.e:  org/apache/derby/impl/drda/TestProto.class

I think that class should be moved into the derbyTesting area so that
the drda code can be sealed. I don't think it should be uses as a
precedence for adding more tests outside of derbyTesting.

Dan.


Re: [junit] Move JUnit base/utility classes???

Posted by Andreas Korneliussen <An...@Sun.COM>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Kristian Waagan wrote:
<>

> Hi,
> 
> I still have a question regarding the placement of JUnit tests. I have
> brought this up before, but got very little response (I did get some,
> see below).
> 
> Do we want to support [unit] testing of package private classes?

Maybe it is sufficient to support testing the public methods of public
classes ?

> The easiest solution to achieve this is to keep a mirrored/separate
> source tree, where the tests are put into the corresponding Derby
> production code package (for instance 'org.apache.derby.iapi.types').
> 

I think there are some testclasses which are in the same source tree as
the derby source, however the .class files are packaged into
dergbyTesting.jar.  I.e:  org/apache/derby/impl/drda/TestProto.class


> Andrew brought up the concern wrt building and distribution. We do not
> want to include the testing classes in the releases. Further, JAR
> sealing is causing headaches (unable to distribute the test classes in a
> separate JAR).
> 

Yes, and that is probably why derbynet's manifest has:

Name: org/apache/derby/impl/drda/
Sealed: false


Andreas
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.4 (SunOS)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFE6vbY36DpyYjYNyIRArhHAJsE/FmJpRui8eGLjCGZR2RCj4DLIACeOmtf
Vvr1uNT1BlAslq+Oahti3HI=
=nXDM
-----END PGP SIGNATURE-----

Re: [junit] Move JUnit base/utility classes???

Posted by Kristian Waagan <Kr...@Sun.COM>.
Daniel John Debrunner wrote:
> 
>>> I don't see any value in this, the existing layput looks fine to me.
>>>
>>> org.apache.derbyTesting.junit.functionalTests.tests.jdbcapi
>>> org.apache.derbyTesting.junit.unitTests.lang
>>> org.apache.derbyTesting.junit.systemTests.app1 (future)
>>>
>> (Note: existing layout does not have .junit.)
> (sorry copy & paste error)
> 
>> The value would have been to separate out the junit tests from the other
>> tests, however I understand it is not prioritized and possibly not worth
>> the effort.
> 
> once they are all JUnit though there is no benefit :-)

Hi,

I still have a question regarding the placement of JUnit tests. I have 
brought this up before, but got very little response (I did get some, 
see below).

Do we want to support [unit] testing of package private classes?
The easiest solution to achieve this is to keep a mirrored/separate 
source tree, where the tests are put into the corresponding Derby 
production code package (for instance 'org.apache.derby.iapi.types').

Andrew brought up the concern wrt building and distribution. We do not 
want to include the testing classes in the releases. Further, JAR 
sealing is causing headaches (unable to distribute the test classes in a 
separate JAR).

If people have more opinions at this time, I would like to hear them. If 
not, I'll nag the list again at a later time :)



-- 
Kristian

> 
> Dan.
> 


Re: [junit] Move JUnit base/utility classes???

Posted by Daniel John Debrunner <dj...@apache.org>.

>> I don't see any value in this, the existing layput looks fine to me.
>>
>> org.apache.derbyTesting.junit.functionalTests.tests.jdbcapi
>> org.apache.derbyTesting.junit.unitTests.lang
>> org.apache.derbyTesting.junit.systemTests.app1 (future)
>>
> (Note: existing layout does not have .junit.)
(sorry copy & paste error)

> 
> The value would have been to separate out the junit tests from the other
> tests, however I understand it is not prioritized and possibly not worth
> the effort.

once they are all JUnit though there is no benefit :-)

Dan.


Re: [junit] Move JUnit base/utility classes???

Posted by Andreas Korneliussen <An...@Sun.COM>.
>>>> The functional tests would continue to live in their current location,
>>>> just that the super-class BaseJDBCTestCase would be in the new package.
>>>>
>>>> Thoughts?
>>
>> I support moving the utility classes to a new package.
>>
>> Below are some thoughts on how Junit tests could be structured, in case
>> we would like to also move tests:
>>
>> Package for derby-specific utility classes:
>>
>> org.apache.derbyTesting.junit.util
>>  -> TestConfiguration, JDBCClient, JDBC,..
>>
>>
>> Package for common testcase/testsetup classes:
>>
>> org.apache.derbyTesting.junit.common
>>  -> BaseTestCase, BaseJDBCTestCase, BaseJDBCTestSetup
> 
> I'm not sure the split between util and common here is worth it. The
> classes in common have a very close relationship with the classes in
> util, to my mind it seems they should be together.
> 

Yes, that is correct.

>> Packages for tests:
>>  org.apache.derbyTesting.junit.tests
>>  org.apache.derbyTesting.junit.tests.jdbcapi
>>  org.apache.derbyTesting.junit.tests.lang
>>  org.apache.derbyTesting.junit.tests.store
>>  org.apache.derbyTesting.junit.tests. . .
> 
> 
> I don't see any value in this, the existing layput looks fine to me.
> 
> org.apache.derbyTesting.junit.functionalTests.tests.jdbcapi
> org.apache.derbyTesting.junit.unitTests.lang
> org.apache.derbyTesting.junit.systemTests.app1 (future)
>
(Note: existing layout does not have .junit.)

The value would have been to separate out the junit tests from the other 
tests, however I understand it is not prioritized and possibly not worth 
the effort.

Regards
Andreas

Re: [junit] Move JUnit base/utility classes???

Posted by Daniel John Debrunner <dj...@apache.org>.
Andreas Korneliussen wrote:

> David Van Couvering wrote:
> 
>> Sounds good to me...
>>
>> David
>>
>> Daniel John Debrunner wrote:
>>
>>> Currently the JUnit base and utility classes are in this package:
>>>
>>> org.apache.derbyTesting.functionTests.util
>>>
>>> (See http://wiki.apache.org/db-derby/DerbyJUnitTesting)
>>>
>>> I was wondering if they should be moved, for two reasons:
>>>
>>>   1) That package is cluttered up with other stuff, it's more or less a
>>> dumping ground. Utilites, JUnit base classes, "user level" classes for
>>> procedures and vtis, etc.
>>>
>>>   2) JUnit tests can be much more than funcional tests, e.g. having
>>> system tests as JUnit tests would make them easy for everyone to run.
>>>
>>> I was thinking of the following package:
>>>
>>> org.apache.derbyTesting.junit
>>>
>>> The package would be limited to base classes for JUnit tests and JUnit
>>> related utilities such as the JDBC class. Classes for specific tests, or
>>> those that implement Java procedures for tests etc. would not be
>>> allowed.
>>>
>>> The functional tests would continue to live in their current location,
>>> just that the super-class BaseJDBCTestCase would be in the new package.
>>>
>>> Thoughts?
> 
> 
> I support moving the utility classes to a new package.
> 
> Below are some thoughts on how Junit tests could be structured, in case
> we would like to also move tests:
> 
> Package for derby-specific utility classes:
> 
> org.apache.derbyTesting.junit.util
>  -> TestConfiguration, JDBCClient, JDBC,..
> 
> 
> Package for common testcase/testsetup classes:
> 
> org.apache.derbyTesting.junit.common
>  -> BaseTestCase, BaseJDBCTestCase, BaseJDBCTestSetup

I'm not sure the split between util and common here is worth it. The
classes in common have a very close relationship with the classes in
util, to my mind it seems they should be together.

> Packages for tests:
>  org.apache.derbyTesting.junit.tests
>  org.apache.derbyTesting.junit.tests.jdbcapi
>  org.apache.derbyTesting.junit.tests.lang
>  org.apache.derbyTesting.junit.tests.store
>  org.apache.derbyTesting.junit.tests. . .


I don't see any value in this, the existing layput looks fine to me.

org.apache.derbyTesting.junit.functionalTests.tests.jdbcapi
org.apache.derbyTesting.junit.unitTests.lang
org.apache.derbyTesting.junit.systemTests.app1 (future)

Though maybe one day some cleanup could happen and some naming
guidlines, e.g.

org.apache.derbyTesting.junit.functionalTests.tests.derbyNet.testProperties

having test in the name four times seems excessive.

My point was just to get the Junit generic stuff out of the
functionalTest layer since it can apply to so much more. I'm not willing
to spend time moving the existing tests around.

Dan.




Re: [junit] Move JUnit base/utility classes???

Posted by Andreas Korneliussen <An...@Sun.COM>.
David Van Couvering wrote:
> Sounds good to me...
> 
> David
> 
> Daniel John Debrunner wrote:
>> Currently the JUnit base and utility classes are in this package:
>>
>> org.apache.derbyTesting.functionTests.util
>>
>> (See http://wiki.apache.org/db-derby/DerbyJUnitTesting)
>>
>> I was wondering if they should be moved, for two reasons:
>>
>>   1) That package is cluttered up with other stuff, it's more or less a
>> dumping ground. Utilites, JUnit base classes, "user level" classes for
>> procedures and vtis, etc.
>>
>>   2) JUnit tests can be much more than funcional tests, e.g. having
>> system tests as JUnit tests would make them easy for everyone to run.
>>
>> I was thinking of the following package:
>>
>> org.apache.derbyTesting.junit
>>
>> The package would be limited to base classes for JUnit tests and JUnit
>> related utilities such as the JDBC class. Classes for specific tests, or
>> those that implement Java procedures for tests etc. would not be allowed.
>>
>> The functional tests would continue to live in their current location,
>> just that the super-class BaseJDBCTestCase would be in the new package.
>>
>> Thoughts?

I support moving the utility classes to a new package.

Below are some thoughts on how Junit tests could be structured, in case 
we would like to also move tests:

Package for derby-specific utility classes:

org.apache.derbyTesting.junit.util
  -> TestConfiguration, JDBCClient, JDBC,..


Package for common testcase/testsetup classes:

org.apache.derbyTesting.junit.common
  -> BaseTestCase, BaseJDBCTestCase, BaseJDBCTestSetup


Packages for tests:
  org.apache.derbyTesting.junit.tests
  org.apache.derbyTesting.junit.tests.jdbcapi
  org.apache.derbyTesting.junit.tests.lang
  org.apache.derbyTesting.junit.tests.store
  org.apache.derbyTesting.junit.tests. . .


Andreas


Re: [junit] Move JUnit base/utility classes???

Posted by David Van Couvering <Da...@Sun.COM>.
Sounds good to me...

David

Daniel John Debrunner wrote:
> Currently the JUnit base and utility classes are in this package:
> 
> org.apache.derbyTesting.functionTests.util
> 
> (See http://wiki.apache.org/db-derby/DerbyJUnitTesting)
> 
> I was wondering if they should be moved, for two reasons:
> 
>   1) That package is cluttered up with other stuff, it's more or less a
> dumping ground. Utilites, JUnit base classes, "user level" classes for
> procedures and vtis, etc.
> 
>   2) JUnit tests can be much more than funcional tests, e.g. having
> system tests as JUnit tests would make them easy for everyone to run.
> 
> I was thinking of the following package:
> 
> org.apache.derbyTesting.junit
> 
> The package would be limited to base classes for JUnit tests and JUnit
> related utilities such as the JDBC class. Classes for specific tests, or
> those that implement Java procedures for tests etc. would not be allowed.
> 
> The functional tests would continue to live in their current location,
> just that the super-class BaseJDBCTestCase would be in the new package.
> 
> Thoughts?
> Dan.
>