~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/testing.txt

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2011-04-18 04:55:00 UTC
  • mfrom: (5784.2.1 754188-apport-test)
  • Revision ID: pqm@pqm.ubuntu.com-20110418045500-ce6lkgyiq7f47q43
(mbp) Rewrite test_report_bug_legacy away from using doctest (see bug
 764188) (Martin Pool)

Show diffs side-by-side

added added

removed removed

Lines of Context:
329
329
We make selective use of doctests__.  In general they should provide
330
330
*examples* within the API documentation which can incidentally be tested.  We
331
331
don't try to test every important case using doctests |--| regular Python
332
 
tests are generally a better solution.  That is, we just use doctests to
333
 
make our documentation testable, rather than as a way to make tests.
 
332
tests are generally a better solution.  That is, we just use doctests to make
 
333
our documentation testable, rather than as a way to make tests. Be aware that
 
334
doctests are not as well isolated as the unit tests, if you need more
 
335
isolation, you're likely want to write unit tests anyway if only to get a
 
336
better control of the test environment.
334
337
 
335
338
Most of these are in ``bzrlib/doc/api``.  More additions are welcome.
336
339
 
337
340
  __ http://docs.python.org/lib/module-doctest.html
338
341
 
 
342
There is an `assertDoctestExampleMatches` method in
 
343
`bzrlib.tests.TestCase` that allows you to match against doctest-style
 
344
string templates (including ``...`` to skip sections) from regular Python
 
345
tests.
 
346
 
339
347
 
340
348
Shell-like tests
341
349
----------------
367
375
The execution stops as soon as an expected output or an expected error is not
368
376
matched.
369
377
 
370
 
When no output is specified, any ouput from the command is accepted
371
 
and execution continue.
 
378
If output occurs and no output is expected, the execution stops and the
 
379
test fails.  If unexpected output occurs on the standard error, then
 
380
execution stops and the test fails.
372
381
 
373
382
If an error occurs and no expected error is specified, the execution stops.
374
383
 
447
456
    def test_unshelve_keep(self):
448
457
        # some setup here
449
458
        script.run_script(self, '''
450
 
            $ bzr add file
451
 
            $ bzr shelve --all -m Foo
 
459
            $ bzr add -q file
 
460
            $ bzr shelve -q --all -m Foo
452
461
            $ bzr shelve --list
453
462
            1: Foo
454
 
            $ bzr unshelve --keep
 
463
            $ bzr unshelve -q --keep
455
464
            $ bzr shelve --list
456
465
            1: Foo
457
466
            $ cat file
471
480
            yes
472
481
            """)
473
482
 
 
483
To avoid having to specify "-q" for all commands whose output is
 
484
irrelevant, the run_script() method may be passed the keyword argument
 
485
``null_output_matches_anything=True``.  For example::
 
486
 
 
487
    def test_ignoring_null_output(self):
 
488
        self.run_script("""
 
489
            $ bzr init
 
490
            $ bzr ci -m 'first revision' --unchanged
 
491
            $ bzr log --line
 
492
            1: ...
 
493
            """, null_output_matches_anything=True)
 
494
           
 
495
 
474
496
Import tariff tests
475
497
-------------------
476
498
 
843
865
 
844
866
    class TestCheckout(TestCase):
845
867
 
846
 
    variations = multiply_scenarios(
847
 
        VaryByRepositoryFormat(), 
848
 
        VaryByTreeFormat(),
849
 
        )
 
868
        scenarios = multiply_scenarios(
 
869
            VaryByRepositoryFormat(), 
 
870
            VaryByTreeFormat(),
 
871
            )
850
872
 
851
873
The `load_tests` declaration or definition should be near the top of the
852
874
file so its effect can be seen.
954
976
 
955
977
Please see bzrlib.treebuilder for more details.
956
978
 
 
979
PreviewTree
 
980
~~~~~~~~~~~
 
981
 
 
982
PreviewTrees are based on TreeTransforms.  This means they can represent
 
983
virtually any state that a WorkingTree can have, including unversioned files.
 
984
They can be used to test the output of anything that produces TreeTransforms,
 
985
such as merge algorithms and revert.  They can also be used to test anything
 
986
that takes arbitrary Trees as its input.
 
987
 
 
988
::
 
989
 
 
990
  # Get an empty tree to base the transform on.
 
991
  b = self.make_branch('.')
 
992
  empty_tree = b.repository.revision_tree(_mod_revision.NULL_REVISION)
 
993
  tt = TransformPreview(empty_tree)
 
994
  self.addCleanup(tt.finalize)
 
995
  # Empty trees don't have a root, so add it first.
 
996
  root = tt.new_directory('', ROOT_PARENT, 'tree-root')
 
997
  # Set the contents of a file.
 
998
  tt.new_file('new-file', root, 'contents', 'file-id')
 
999
  preview = tt.get_preview_tree()
 
1000
  # Test the contents.
 
1001
  self.assertEqual('contents', preview.get_file_text('file-id'))
 
1002
 
 
1003
PreviewTrees can stack, with each tree falling back to the previous::
 
1004
 
 
1005
  tt2 = TransformPreview(preview)
 
1006
  self.addCleanup(tt2.finalize)
 
1007
  tt2.new_file('new-file2', tt2.root, 'contents2', 'file-id2')
 
1008
  preview2 = tt2.get_preview_tree()
 
1009
  self.assertEqual('contents', preview2.get_file_text('file-id'))
 
1010
  self.assertEqual('contents2', preview2.get_file_text('file-id2'))
 
1011
 
957
1012
 
958
1013
Temporarily changing state
959
1014
~~~~~~~~~~~~~~~~~~~~~~~~~~
963
1018
 
964
1019
    self.overrideAttr(osutils, '_cached_user_encoding', 'latin-1')
965
1020
 
 
1021
Temporarily changing environment variables
 
1022
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
1023
 
 
1024
If yout test needs to temporarily change some environment variable value
 
1025
(which generally means you want it restored at the end), you can use::
 
1026
 
 
1027
    self.overrideEnv('BZR_ENV_VAR', 'new_value')
 
1028
 
 
1029
If you want to remove a variable from the environment, you should use the
 
1030
special ``None`` value::
 
1031
 
 
1032
    self.overrideEnv('PATH', None)
 
1033
 
 
1034
If you add a new feature which depends on a new environment variable, make
 
1035
sure it behaves properly when this variable is not defined (if applicable) and
 
1036
if you need to enforce a specific default value, check the
 
1037
``TestCase._cleanEnvironment`` in ``bzrlib.tests.__init__.py`` which defines a
 
1038
proper set of values for all tests.
 
1039
 
966
1040
Cleaning up
967
1041
~~~~~~~~~~~
968
1042