<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 <small><i>This notebook was prepared by Donne Martin. Source and license info is on GitHub.</i></small>
Challenge Notebook
Problem
Step1:  Unit Test
<ASSISTANT_TASK:>
Python Code:
%run ../stack/stack.py
%load ../stack/stack.py
class QueueFromStacks(object):
    def __init__(self):
        # TODO: Implement me
        pass
    def shift_stacks(self, source, destination):
        # TODO: Implement me
        pass
    def enqueue(self, data):
        # TODO: Implement me
        pass
    def dequeue(self):
        # TODO: Implement me
        pass
Explanation: <small><i>This notebook was prepared by Donne Martin. Source and license info is on GitHub.</i></small>
Challenge Notebook
Problem: Implement a queue using two stacks.
Constraints
Test Cases
Algorithm
Code
Unit Test
Solution Notebook
Constraints
Do you expect the methods to be enqueue and dequeue?
Yes
Can we assume we already have a stack class that can be used for this problem?
Yes
Test Cases
Enqueue and dequeue on empty stack
Enqueue and dequeue on non-empty stack
Multiple enqueue in a row
Multiple dequeue in a row
Enqueue after a dequeue
Dequeue after an enqueue
Algorithm
Refer to the Solution Notebook.  If you are stuck and need a hint, the solution notebook's algorithm discussion might be a good place to start.
Code
End of explanation
# %load test_queue_from_stacks.py
from nose.tools import assert_equal
class TestQueueFromStacks(object):
    def test_queue_from_stacks(self):
        print('Test: Dequeue on empty stack')
        queue = QueueFromStacks()
        assert_equal(queue.dequeue(), None)
        print('Test: Enqueue on empty stack')
        print('Test: Enqueue on non-empty stack')
        print('Test: Multiple enqueue in a row')
        num_items = 3
        for i in range(0, num_items):
            queue.enqueue(i)
        print('Test: Dequeue on non-empty stack')
        print('Test: Dequeue after an enqueue')
        assert_equal(queue.dequeue(), 0)
        print('Test: Multiple dequeue in a row')
        assert_equal(queue.dequeue(), 1)
        assert_equal(queue.dequeue(), 2)
        print('Test: Enqueue after a dequeue')
        queue.enqueue(5)
        assert_equal(queue.dequeue(), 5)
        print('Success: test_queue_from_stacks')
def main():
    test = TestQueueFromStacks()
    test.test_queue_from_stacks()
if __name__ == '__main__':
    main()
Explanation: Unit Test
End of explanation
<END_TASK>