Thanks James for your comments! Some of the links were really interesting to read! Do you want to participate in the webinar as a teacher? ----- Yury Katkov, WikiVote
On Fri, May 10, 2013 at 3:01 PM, James HK <jamesin.hongkon...@gmail.com> wrote: > Hi, > >> I would like to suggest that unit/functional/integration tests would be the >> best solution for this. I know it's not easy to get into a testing culture, >> but various projects including parts of SMW are adopting this. It solves >> these problems: > > This is certainly the right approach which also reflects the > encouragement that new code only gets deployed if unit test(s) being > provided to describe the intended behaviour. The reason for this is to > shield against regressions, make change interdependencies more > visible, and help verify edge cases. Currently SMW 1.9 deploys a set > of 45+ phpunit test classes [j.1] together with 13+ qunit test suites > [j.2]. > >> I'd suggest that beginners working with experts should be encouraged to >> create tests as a way to understand the current code base, and that ... > > Yes, if someone really wants to understand how SMW works and desires > to contribute in a meaningful way, he or she should start with unit > tests (either extend existing ones or create additional tests for > functions which have not yet been covered; for an analysis about the > coverage statistics use [2]). > >> ... running tests suites should be a standard activity in releases. Jenkins >> and Travis >> (hosted) are two continuous integration platforms. > > Every time we submit code to the master phpunit tests are being run > through Jenkins [j.3, j.4] and we await that qunits test are being > handled by Jenkins as well [j.5]. > > == Suggestions == > If you are working with the SMW code base: > > * Don't get scared just because some "fancy" jargon is being used or > you can't find what you are looking for it at first sight > > * Don't try to understand the code by simply reading it, use the means > of interacting with it. > > * If you are not sure what the code does write a test [0, 1] and > extend its class/method documentation > > == Addendum == > * When using PHP, facilitate the SMW namespace [a.1] and for > JavaScript use the smw namespace to avoid polluting the global > $/window namespace [a.2, a.3, a.4] > > * If you have new functionality, write your code, use dependency > injection [a.5] (to enforce loose coupling between objects) and > provide unit tests that will verify that those methods do what they > suppose to do > > * Avoid static classes/methods [a.6] unless you are doing class > independent object factoring, hook interaction > > * Split methods into units which will allow easy assertion (even if it > means the code gets a bit longer) > > * JavaScript should follow similar rules by providing qunit tests and > encapsulate modules [j.2, a.3, a.7, a.8] > > * Use type hinting where possible [a.9] > > * Use meaningful in-code comments (describe what the method does, what > parameters being used, what is expected as return, when this method > was first introduced) in order for docxygen (PHP) or > jsduck(JavaScript) to generate valid documentation and help others to > understand its indented behaviour > > * Avoid turning protected/private into public methods unless it is > necessary and instead use the ReflectionClass [a.10] for testing (SMW > has as several tests that is following this schema) > > * If you can't test (create) certain objects because of their > complexity (e.g SMWQueryResult) use a mock or stub object [a.11, a.12, > a.13] > > == Links == > > [0] http://www.semantic-mediawiki.org/wiki/Unit_tests > > [1] http://net.tutsplus.com/tutorials/php/hands-on-unit-testing-with-phpunit/ > > [2] http://phpunit.de/manual/3.2/en/code-coverage-analysis.html > > [j.1] > https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/SemanticMediaWiki.git;a=tree;f=tests/phpunit > > [j.2] > https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/SemanticMediaWiki.git;a=tree;f=tests/qunit > > [j.3] http://sourceforge.net/mailarchive/message.php?msg_id=30370087 > > [j.4] > https://integration.wikimedia.org/ci/job/mwext-SemanticMediaWiki-testextensions-master/ > > [j.5] https://gerrit.wikimedia.org/r/#/c/53535/ > > [a.1] http://www.php.net/manual/en/language.namespaces.rationale.php > > [a.2] https://gist.github.com/hallettj/64478 > > [a.3] http://yuiblog.com/blog/2007/06/12/module-pattern/ > > [a.4] http://www.javascripttoolbox.com/bestpractices/#namespace > > [a.5] http://net.tutsplus.com/tutorials/php/dependency-injection-in-php/ > > [a.6] > http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/ > > [a.7] http://qunitjs.com/cookbook/ > > [a.8] http://benalman.com/talks/unit-testing-qunit.html > > [a.9] http://php.net/manual/en/language.oop5.typehinting.php > > [a.10] > http://www.mikeyd.com.au/2011/01/20/how-to-use-phps-reflectionclass-to-test-private-methods-and-properties-with-phpunit/ > > [a.11] http://net.tutsplus.com/tutorials/php/all-about-mocking-with-phpunit/ > > [a.12] > http://codeutopia.net/blog/2009/06/26/unit-testing-4-mock-objects-and-testing-code-which-uses-the-database/ > > [a.13] http://phpunit.de/manual/3.7/en/test-doubles.html > > Cheers ------------------------------------------------------------------------------ Learn Graph Databases - Download FREE O'Reilly Book "Graph Databases" is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may _______________________________________________ Semediawiki-devel mailing list Semediawiki-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/semediawiki-devel