58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# 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:
 | 
						|
 | 
						|
```python
 | 
						|
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.
 | 
						|
 | 
						|
```python
 | 
						|
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.
 | 
						|
 | 
						|
<!-- # Available Moto services:
 | 
						|
*    S3
 | 
						|
*    EC2
 | 
						|
*    DynamoDB
 | 
						|
 | 
						|
#### Install
 | 
						|
 | 
						|
```console
 | 
						|
pip install moto
 | 
						|
```
 | 
						|
 --> |