Code samples

A simple test case

Here’s an example of a test case that the authors of Requests might have written, if they were using Contexts. See the Guide for details.

import requests

class WhenRequestingAResourceThatDoesNotExist:
    def establish_that_we_are_asking_for_a_made_up_resource(self):
        self.uri = "http://www.github.com/itdontexistman"
        self.session = requests.Session()

    def because_we_make_a_request(self):
        self.response = self.session.get(self.uri)

    def the_response_should_have_a_status_code_of_404(self):
        assert self.response.status_code == 404

    def the_response_should_have_an_HTML_content_type(self):
        assert self.response.headers['content-type'] == 'text/html'

    def cleanup_the_session(self):
        self.session.close()

if __name__ == '__main__':
    contexts.main()

Triangulation

Here’s a brief example of Contexts’s triangulation feature. We’re asserting that the various different types of numbers in Python can all be multiplied by 0 to produce the expected result.

class WhenMultiplyingANumberByZero:
    @classmethod
    def examples_of_numbers(cls):
        yield 0
        yield -6
        yield 3
        yield 1.6
        yield 6 + 2j

    def because_we_multiply_by_0(self, example):
        self.result = example * 0

    def it_should_return_0(self):
        assert self.result == 0

If you yield tuples from the examples method, and you accept multiple arguments to the test methods, Contexts will unpack the tuple and pass it in as separate arguments.

class WhenMultiplyingTwoNumbers:
    @classmethod
    def examples_of_numbers_and_their_products(cls):
        yield 1, 12, 12
        yield -3.2, 2, -6.4
        yield 6 + 2j, 9, 54 + 18j

    def because_we_multiply_the_two(self, x, y, expected):
        self.result = x * y

    def it_should_equal_what_we_expected(self, x, y, expected):
        assert self.result == expected

If you accept only one argument to a test method, but you yield tuples, Contexts will not unpack the tuple.

class WhenIYieldTuples:
    @classmethod
    def examples(cls):
        yield 'abc', 123
        yield [], {}

    def it_should_give_me_tuples(self, example):
        assert isinstance(example, tuple)