Oven logo

Oven

Published

A test framework for Python that makes mocking and iterating over code with tests a breeze

pip install testslide

Package Downloads

Weekly DownloadsMonthly Downloads

Authors

Project URLs

Requires Python

Dependencies

    TestSlide

    Build Status Coverage Status Documentation Status GitHub license PyPI version Code style: black

    A test framework for Python that enable unit testing / TDD / BDD to be productive and enjoyable.

    Its well behaved mocks with thorough API validations catches bugs both when code is first written or long in the future when it is changed.

    The flexibility of using them with existing unittest.TestCase or TestSlide's own test runner let users get its benefits without requiring refactoring existing code.

    Quickstart

    Install:

    pip install TestSlide
    

    Scaffold the code you want to test backup.py:

    class Backup:
      def delete(self, path):
        pass
    

    Write a test case backup_test.py describing the expected behavior:

    import testslide, backup, storage
    
    class TestBackupDelete(testslide.TestCase):
      def setUp(self):
        super().setUp()
        self.storage_mock = testslide.StrictMock(storage.Client)
        # Makes storage.Client(timeout=60) return self.storage_mock
        self.mock_constructor(storage, 'Client')\
          .for_call(timeout=60)\
          .to_return_value(self.storage_mock)
    
      def test_delete_from_storage(self):
        # Set behavior and assertion for the call at the mock
        self.mock_callable(self.storage_mock, 'delete')\
          .for_call('/file/to/delete')\
          .to_return_value(True)\
          .and_assert_called_once()
        backup.Backup().delete('/file/to/delete')
    

    TestSlide's StrictMock, mock_constructor() and mock_callable() are seamlessly integrated with Python's TestCase.

    Run the test and see the failure:

    Failing test

    TestSlide's mocks failure messages guide you towards the solution, that you can now implement:

    import storage
    
    class Backup:
      def __init__(self):
        self.storage = storage.Client(timeout=60)
    
      def delete(self, path):
        self.storage.delete(path)
    

    And watch the test go green:

    Passing test

    It is all about letting the failure messages guide you towards the solution. There's a plethora of validation inside TestSlide's mocks, so you can trust they will help you iterate quickly when writing code and also cover you when breaking changes are introduced.

    Full documentation

    There's a lot more that TestSlide can offer, please check the full documentation at https://testslide.readthedocs.io/ to learn more.

    Requirements

    • Linux
    • Python 3

    Join the TestSlide community

    TestSlide is open source software, contributions are very welcome!

    See the CONTRIBUTING file for how to help out.

    License

    TestSlide is MIT licensed, as found in the LICENSE file.

    Terms of Use

    https://opensource.facebook.com/legal/terms

    Privacy Policy

    https://opensource.facebook.com/legal/privacy

    Copyright

    Copyright © 2021 Meta Platforms, Inc