Skip to main content

A collection of test helpers, additional assertions, and the like.

Project description

This package collects various helpers for writing tests.

assertEllipsis

An assertion which is very helpful when using Testbrowser with unittest.TestCase (instead of doctests).

Some examples:

class MyTest(unittest.TestCase, gocept.testing.assertion.Ellipsis):
# [...]


self.assertEllipsis('...bar...', 'foo bar qux')
# -> nothing happens

self.assertEllipsis('foo', 'bar')
# -> AssertionError: Differences (ndiff with -expected +actual):
     - foo
     + bar

self.assertNotEllipsis('foo', 'foo')
# -> AssertionError: "Value unexpectedly matches expression 'foo'."

To use, inherit from gocept.testing.assertion.Ellipsis in addition to unittest.TestCase.

assertStartsWith, assertEndsWith

class MyTest(unittest.TestCase, gocept.testing.assertion.Ellipsis):

    def test_something(self):
        self.assertStartsWith('foo', 'foobar') # --> pass
        self.assertEndsWith('bar', 'foobar') # --> pass
        self.assertStartsWith('qux', 'foobar') # --> fail
        self.assertEndsWith('qux', 'foobar') # --> fail

assertNothingRaised

The opposite of assertRaises(), this is an assertion that makes some tests more readable. As assertRaises(), it can be used as as context manager, too:

class MyTest(unittest.TestCase, gocept.testing.assertion.Exceptions):
# [...]

self.assertNothingRaised(do_something, 1, 2, 3)

with self.assertNothingRaised():
    do_something(1, 2, 3)

mock patch context

gocept.testing.mock.Patches collects mock patches that are valid for the whole TestCase, and resets them all in one go in tearDown (this is pending incluion upstream as mock.patcher(), see issue 30):

class MyTest(unittest.TestCase):

    def setUp(self):
        self.patches = gocept.testing.mock.Patches()

    def tearDown(self):
        self.patches.reset()

    def test_something(self):
        compile = self.patches.add('re.compile')

It offers three methods:

add:

wraps mock.patch()

add_object:

wraps mock.patch.object

add_dict:

wraps mock.patch.dict

Note that gocept.testing does not declare a dependency on mock to be as lightweight as possible, so clients need to do that themselves.

assertCalledWith

This is syntactic sugar around mock.assert_called_with, so you can write:

class MyTest(unittest.TestCase, gocept.testing.mock.Assertions):

    def test_something(self):
        dummy = mock.Mock()
        dummy(True)
        self.assertCalledWith(dummy, True)

instead of:

dummy.assert_called_with(True)

Mocking properties

gocept.testing.mock.Property is syntactic sugar directly lifted from the mock documentation that allows you to patch properties like this:

class Dummy(object):

    @property
    def foo(self):
        return False


with mock.patch('Dummy.foo', gocept.testing.mock.Property()) as foo:
    foo.return_value = 'something else'

Attribute patch context

This has nothing to do with mocks, it’s a convenience helper for setting and automatically resetting attributes of objects:

class MyTest(unittest.TestCase):

    def setUp(self):
        self.patches = gocept.testing.patch.Patches()
        self.subject = MyClass()

    def tearDown(self):
        self.patches.reset()

    def test_something(self):
        self.assertEqual('one', self.subject.foo)
        self.patches.set(self.subject, 'foo', 'two')
        self.assertEqual('two', self.subject.foo)

Method call patch context

This allows to call a method and reset it later on automatically. At the moment, only methods that take a single parameter are supported, by passing in both the new value and the old value (to which it should be reset):

class MyTest(unittest.TestCase):

    def setUp(self):
        self.patches = gocept.testing.patch.Patches()

    def tearDown(self):
        self.patches.reset()

    def test_something(self):
        self.patches.call(
            zope.component.hooks, 'setSite',
            my_site, zope.component.hooks.getSite())

Temporary directory

gocept.testing.fixture.TempDir encapsulates the common pattern to create a temporary directory and delete it after the test has run. The name of the directory is avaliable as self.tmpdir. Note that since unittest.TestCase does not call super, you need to mix in TempDir first:

class MyTest(gocept.testing.fixture.TempDir, unittest.TestCase):

    def test_something(self):
        self.assertTrue(os.path.isdir(self.tmpdir))

Development

The source code is available in the mercurial repository at https://code.gocept.com/hg/public/gocept.testing

Please report any bugs you find at https://projects.gocept.com/projects/projects/gocept-testing/issues

Changelog

1.4 (2012-06-04)

  • Add TempDir fixture.

  • Add assertStartsWith, assertEndsWith.

1.3.2 (2012-05-09)

  • Allow assertEllipsis to work with mixed unicode/bytes argument (assuming the bytes are UTF-8, as they are with zope.testbrowser).

1.3.1 (2012-02-03)

  • Display original traceback in assertNothingRaised.

1.3 (2011-12-16)

  • Add patch helper for attributes and simple callables.

1.2.1 (2011-12-09)

  • Make Python-3 compatible (at least syntactically).

1.2 (2011-12-09)

1.1 (2011-11-10)

  • Add assertNothingRaised.

1.0 (2011-11-02)

  • first release: assertEllipsis

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gocept.testing-1.4.zip (24.4 kB view details)

Uploaded Source

File details

Details for the file gocept.testing-1.4.zip.

File metadata

  • Download URL: gocept.testing-1.4.zip
  • Upload date:
  • Size: 24.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for gocept.testing-1.4.zip
Algorithm Hash digest
SHA256 0b3282f71def060409161d1347d154e1214e81bb4327d46da6802651256fd4f9
MD5 11ab870f9910f801abde83de9d1a3fdb
BLAKE2b-256 37530252a03fb1a13afb3554b7be6892a855801bb203d1f4f63579cf77242d35

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page