JUnit: A critical look JUnit: Un regard critique
As a model of XP development (done at a few thousand feet above ground) I was expecting a solid bug free transperant code for JUnit. Comme un modèle de développement XP (faite à quelques milliers de pieds au-dessus du sol) Je m'attendais à un solide sans bug transperant code de JUnit.
I noticed few interesting bugs & surprising features in the code. J'ai remarqué quelques bugs et intéressantes caractéristiques surprenant dans le code.
If you want to increase your test count (possibly for your manager who checks the tests written or for your customer) by a factor x (without actually performing the tests) then just override the default implementation of countTestCases() to return x. Si vous voulez augmenter votre compte d'essai (peut-être pour votre gestionnaire qui vérifie les tests écrits ou pour votre client) par un facteur X (sans effectivement les tests) puis seulement l'emporter sur la mise en œuvre par défaut de countTestCases () pour retourner x. The documentation says “Counts the number of test cases executed by run(TestResult result)”. La documentation dit "compte le nombre de cas de tests exécutés par run (Résultats de test result)". However in reality it always returns 1. Toutefois, en réalité, il renvoie toujours 1.
If you have 10 test cases in your Test class and if you return 20 in your impl. Si vous disposez de 10 cas de test dans votre classe d'essai et si vous retournez dans votre 20 mise. of countTestCases() then the total test count is shown as 200. countTestCases de () le nombre total d'essai est de montré que 200. However in reality only 10 tests are run. Toutefois, en réalité, seulement 10 tests sont gérés.
The code has interesting tests performed on a TestCase subclass like it checks that there is at least one method with name starting with test (could be just test() ). Le code est intéressant d'essais effectués sur une sous-classe TestCase comme il vérifie qu'il existe au moins une méthode avec un nom commençant par test (peut être tout test ()). It checks that there is a public constructor which accepts a string as parameter. Il vérifie qu'il existe un constructeur public qui accepte une chaîne comme paramètre. It could still do nothing. Il pourrait encore ne rien faire.
These are interesting ideas half-baked which feels forced on the user, specially when you decide to override the default implementation to hook it to your test generator. Ce sont des idées intéressantes à mi-cuit au four qui se sent forcé sur l'utilisateur, en particulier lorsque vous décidez de passer outre la mise en œuvre par défaut à accrocher à votre générateur de test. Also you might have noticed that the error messages are often not very illuminating when the cons is missing. Aussi vous avez peut-être remarqué que les messages d'erreur sont souvent pas très éclairante lorsque les inconvénients est manquant.
The code does this funny passing back and forth with run variants between TestCase & TestResults for no apparent reason before finally calling testBare. Le code ne passant ce drôle de part et d'exécuter avec des variantes entre TestCase & TestResults sans raison apparente avant de finalement appeler testBare. Methods like runProtected or run variants belong to TestCase. Méthodes comme runProtected terme ou variantes appartiennent à TestCase. At the least lets keep the run methods in one class instead of calling each other back and forth. Au moins permet de garder le terme méthodes dans une classe au lieu d'appeler les uns les autres et inversement.
Filed under Classé sous Java Software Logiciel de Java , Technology Technologie | |
| |
RSS 2.0 RSS 2,0 | |
Email this Article Envoyer cet article
You may also like to read Vous mai également à lire |




August 10th, 2004 at 4:50 am Août 10th, 2004 at 4:50 am
Take a look at TestNG: Jetez un coup d'oeil à TestNG: http://beust.com/testng
August 10th, 2004 at 11:28 am Août 10th, 2004 at 11:28 am
The design assumes you implement Test, and that’s all. La conception du principe que vous mettez en place des essais, et c'est tout. However, it provides _convenience_ methods (such as TestCase) that allow you to write Tests with a minimum of fuss. Toutefois, il prévoit _convenience_ méthodes (telles que TestCase) qui vous permettent d'écrire des essais avec un minimum de bruit.
Yes, it’s not overly defensive: it makes the assumption that the developer is trying to use it, not abuse it. Oui, il n'est pas trop défensive: il fait l'hypothèse que le développeur tente de l'utiliser, pas en abuser.
If you look at the lifecycle of the tests, BTW, you’ll see why the run method is passed back and forth. Si vous regardez le cycle de vie des essais, BTW, vous verrez pourquoi le terme méthode est adoptée dans les deux sens.
August 11th, 2004 at 3:40 am Août 11, 2004 at 3:40 am
Take a look at TestNG, Jetez un coup d'oeil à TestNG, http://beust.com/testng
August 11th, 2004 at 4:57 am Août 11, 2004 at 4:57 am
“their user stories didn’t foresee it” — that’s it. "Leurs histoires utilisateur n'a pas le prévoir" - that's it. Kent Beck’s JUnit was written to certain (probably not documented) specifications and assumptions. Kent Beck's JUnit a été écrit pour certains (probablement pas documentée) du cahier des charges et des hypothèses. It actually works well for its intended purposes, though there is a Smalltalk flavor to it that someone who came to Java from other languages would not appreciate. Il fonctionne bien à des fins, mais il est un Smalltalk saveur à ce que quelqu'un qui est venu à Java d'autres langues serait pas apprécié.
I expect that TestSuite() overrides countTestCases() appropriately… but the framework is not written to prevent people from abusing it, since that would get in the way of people who need to extend it for legitimate reasons. Je m'attends à ce que TestSuite () l'emporte sur countTestCases () appropriée… mais le cadre n'est pas écrit pour éviter aux gens d'abuser, car cela obtenir dans la façon dont des personnes qui ont besoin de l'étendre pour des raisons légitimes.
I suspect that “TestResults” is following the Smalltalk idiom of a “collecting parameter” (see Kent Beck’s book “Smalltalk Best Practice Patterns”. Je soupçonne que "TestResults" suit le langage Smalltalk d'un "paramètre de collecte" (voir Kent Beck's livre "Smalltalk Best Practice Patterns".