Go to file
2013-02-28 00:03:57 -05:00
moto add sts to dynamo for boto 2.5 backwards compat 2013-02-28 00:03:57 -05:00
tests add other ways to call decorator 2013-02-27 22:25:15 -05:00
.gitignore add boto to install requires 2013-02-25 23:56:41 -05:00
Makefile clean up urls. start to clean up responses 2013-02-18 21:22:03 -05:00
README.md add other ways to call decorator 2013-02-27 22:25:15 -05:00
requirements.txt replace pdbs with NotImplemented 2013-02-25 23:21:49 -05:00
setup.py 0.0.5 2013-02-26 15:13:09 -05:00

Moto - Mock Boto

WARNING: Moto is still in active development

In a nutshell

Moto is a library that allows your python tests to easily mock out the boto library

Imagine you have the following code that you want to test:

import boto
from boto.s3.key import Key

class MyModel(object):
    def __init__(self, name, value):
        self.name = name
        self.value = value

    def save(self):
        conn = boto.connect_s3()
        bucket = conn.get_bucket('mybucket')
        k = Key(bucket)
        k.key = self.name
        k.set_contents_from_string(self.value)

Take a minute to think how you would have tested that in the past.

Now see how you could test it with Moto.

import boto
from moto import mock_s3
from mymodule import MyModel

@mock_s3
def test_my_model_save():
    model_instance = MyModel('steve', 'is awesome')
    model_instance.save()

    conn = boto.connect_s3()
    assert conn.get_bucket('mybucket').get_key('steve') == 'is awesome'

With the decorator wrapping the test, all the calls to s3 are automatically mocked out. The mock keeps the state of the buckets and keys.

Usage

All of the services can be used as a decorator, context manager, or in a raw form.

Decorator

@mock_s3
def test_my_model_save():
    model_instance = MyModel('steve', 'is awesome')
    model_instance.save()

    conn = boto.connect_s3()
    assert conn.get_bucket('mybucket').get_key('steve') == 'is awesome'

Context Manager

def test_my_model_save():
    with mock_s3():
        model_instance = MyModel('steve', 'is awesome')
        model_instance.save()

        conn = boto.connect_s3()
        assert conn.get_bucket('mybucket').get_key('steve') == 'is awesome'

Raw use

def test_my_model_save():
    mock = mock_s3()
    mock.start()

    model_instance = MyModel('steve', 'is awesome')
    model_instance.save()

    conn = boto.connect_s3()
    assert conn.get_bucket('mybucket').get_key('steve') == 'is awesome'

    mock.stop()