Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions FizzBuzz.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
"""
Q1. Why is the report method untestable ? [2 pts]



Ans:
- report() method is instantiating collaborators like write,close,etc.
- have external dependency.

Q2. How will you change the api of the report method to make it more testable ? [2 pts]


Ans:
def report(self, numbers,fileHandler):

"""
class FizzBuzz(object):
def report(self, numbers):
def report(self, numbers,fileHandler=open):

report_file = open('c:/temp/fizzbuzz_report.txt', 'w')
report_file = fileHandler('c:/temp/fizzbuzz_report.txt', 'w')

for number in numbers:
msg = str(number) + " "
Expand All @@ -31,6 +31,4 @@ def report(self, numbers):

if "__main__" == __name__:
fb = FizzBuzz()
fb.report(range(100))


fb.report(range(100))
34 changes: 15 additions & 19 deletions TestFizzBuzzMocked.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import unittest
import pymock
import FizzBuzz
import TestFizzBuzzStubbed
"""
Q5. Write the psuedocode for the test_repport method, such that it uses PyMock
mock objects to test the report method of FizzBuzz. [5 pts]
Expand All @@ -16,25 +17,20 @@ def tearDown(self):
super(TestFizzBuzzMocked, self).tearDown()
self.fb = None

def test_report(self):
pass

















def test_report(self):
#Create mock
fileHandlerWrapperMock = self.mock()
#Set expectations
self.expectAndReturn(fileHandlerWrapperMock.open('c:/temp/fizzbuzz_report.txt'),'w')
numbers = ['1','2','3','4']
fileHandlerWrapperMock.write(numbers)
fileHandlerWrapperMock.close()
#Replay
self.replay()
#call api
self.fb.record(numbers,fileHandlerWrapperMock)
#verify
self.verify()

if __name__ == "__main__":
unittest.main()
53 changes: 36 additions & 17 deletions TestFizzBuzzStubbed.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,41 @@
import FizzBuzz
"""
Q3. What will be printed when we execute 'python FizzBuzzStubbed.py' ? [3 pts]
Ans:

setUpClass FizzBuzzStubbed
setup
test_report
teardown
setup
test_report
teardown
tearDownClass

"""







"""
Q4. Implement MyStub class so that you can send it as a fake object to the
report method of FizzBuzz object from a test case. [3 pts]
Ans:

"""
class MyStub(object):
pass






def __init__(self):
pass

def write(self, number):
self.numbers.append(number)

def close(self):
self.closed = True

def gen_open_stub(my_stub):
def open(fpath, mode):
return my_stub
return open


class TestFizzBuzzStubbed(unittest.TestCase):

@classmethod
Expand All @@ -49,11 +60,19 @@ def tearDown(self):

def test_report(self):
print "test_report"
pass

numbers = ['1','2','3','4']
my_stub = MyStub()
filehandler = my_stub.gen_open_stub(my_stub)
self.fb.report(numbers,filehandler)
self.assertEqual(numbers[0], '3 fizz \n')

def test_report_for_empty_list(self):
print "test_report"
pass
print "test_report"
numbers = []
my_stub = MyStub()
filehandler = my_stub.gen_open_stub(my_stub)
self.fb.report(numbers,filehandler)


if __name__ == "__main__":
unittest.main()