[ https://issues.apache.org/jira/browse/DERBY-2460?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12484124 ]
Kristian Waagan commented on DERBY-2460: ---------------------------------------- Hi Dan, Your concerns are valid for this kind of tests. My primary goal with the write-up was to try and document the issue to make it easier to understand. I'll give you my view on your questions. I hope others will chime in as well. Regarding the applicability of these kind of tests, I feel that they can be very useful. One example is streaming-classes (Reader/Writer etc) where you can have many boundary conditions. Writing the test also make you think more about your code. Also note that you in as good as all cases will be able to test the code indirectly by manipulating state and feeding data through "public APIs". It's just often a lot more tedious and harder to get as good coverage. 1) In these cases I think the coder can remove the test. The test exist because the method/constructor is package-private. When this changes, the test should go away. Depending on the itch of the coder, and the code change, there are some alternatives: move the test to the "public domain" or rewrite the test. We are using a version control system for our code, another coder can always bring it back and adapt it later. 2) The test is meant as a tool for people that want to use it. I feel a lot more confident that my code for a brand new class works when I have a unit test for it in place. Whether I would write a unit test for a class or not, depends a lot on what the class looks like. The problem you describe is the main factor of my decision; how hard is it to create the required input for my class? Although I basically agree with your reasoning on which tests are critical for a project, I can't really see what's so different about running tests of package-private classes. The main problem is of course that the interfaces are not as stable as the public APIs. Because these tests are testing an isolated area of the code (a single class), they should be very fast to run. I also agree that we won't see that many tests for package-private classes, but why should we miss out on the ones that are obvious candidates? Would imposing this simple rule regarding package-private class tests be two much? (assuming compiling them is enabled by default) "If a package-private test does not compile after your changes, either delete (parts of) it or fix it." For the non-itching coders, this should equal a 'svn rm' and a one-line delete from a suite class. For the itching coder, it would maybe require some thought about why the test no longer compiles, if the change is safe and then some time refreshing the test. Personally I would also recommend running these tests by default, as they might help you figure out why your functional tests suddenly started failing... If I'm the only one feeling the need for writing package-private class tests, I do not mind writing them and not contributing them :) I write them mostly for my own sake anyway, but feel they can serve as documentation on how I intended my class to be used. For the information-hungry; http://www-128.ibm.com/developerworks/library/j-test.html > Create a framework for writing unit tests that will access a private fields > of derby classes. > --------------------------------------------------------------------------------------------- > > Key: DERBY-2460 > URL: https://issues.apache.org/jira/browse/DERBY-2460 > Project: Derby > Issue Type: New Feature > Affects Versions: 10.3.0.0 > Reporter: Julius Stroffek > Priority: Minor > Attachments: derby-2460-writeup-rev01.txt > > > Create a testing framework for writing unit tests that will not test the > functionality but some other properties of the code like DRDA protocol, > conditions of B-trees, behavior of locking, etc. These tests may be written > in a same way like the function tests are but they will not test the public > API but some underlaying Derby functions. So, there is a need for the tests > to access some package private properties/methods. > The discussion about this issue took place on derby-dev couple of months ago. > Please, see > http://www.nabble.com/Testing-implementation-of-private-classes-tf2919330.html#a8158779 > for more information. > Currently, there is an implementation of such a test in > org.apache.derby.impl.drda.TestProto. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.