Skip to content

Commit

Permalink
Merge pull request #15 from fhuertas/pre-1.0.8
Browse files Browse the repository at this point in the history
Fix in 1.0.8
  • Loading branch information
fhuertas authored Nov 15, 2016
2 parents 0f167b7 + cde09f9 commit 1d6d6db
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 23 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ where <python-version> is the version to test. Note: you must be installed that
* FunctionMockCheckCall can return a value instead invoke the function

**1.0.8**
* FunctionMockCheckCall now check 0 invocations
* Fix: FunctionMockCheckCall checks if the value to return is None and not a condition
* Fix: the checks in the FunctionMockCheckCall

## Installation

Expand Down
22 changes: 10 additions & 12 deletions coverage.xml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<?xml version="1.0" ?>
<coverage branch-rate="0" line-rate="0.9887" timestamp="1479205044604" version="4.1">
<coverage branch-rate="0" line-rate="0.9886" timestamp="1479208369991" version="4.1">
<!-- Generated by coverage.py: https://coverage.readthedocs.io -->
<!-- Based on https://raw.githubusercontent.com/cobertura/web/f0366e5e2cf18f111cbd61fc34ef720a6584ba02/htdocs/xml/coverage-03.dtd -->
<sources>
<source>/home/fhuertas/Projects/personal/mock_decorators</source>
</sources>
<packages>
<package branch-rate="0" complexity="0" line-rate="0.9887" name="mock_decorators">
<package branch-rate="0" complexity="0" line-rate="0.9886" name="mock_decorators">
<classes>
<class branch-rate="0" complexity="0" filename="mock_decorators/__init__.py" line-rate="1" name="__init__.py">
<methods/>
Expand Down Expand Up @@ -165,20 +165,20 @@
<line hits="1" number="130"/>
<line hits="1" number="133"/>
<line hits="1" number="134"/>
<line hits="1" number="135"/>
<line hits="1" number="137"/>
<line hits="1" number="139"/>
<line hits="1" number="140"/>
<line hits="1" number="141"/>
<line hits="1" number="142"/>
<line hits="1" number="143"/>
<line hits="1" number="144"/>
<line hits="1" number="145"/>
<line hits="1" number="146"/>
<line hits="1" number="147"/>
<line hits="1" number="148"/>
<line hits="1" number="149"/>
<line hits="1" number="150"/>
<line hits="1" number="151"/>
<line hits="1" number="152"/>
<line hits="1" number="154"/>
<line hits="1" number="156"/>
<line hits="1" number="153"/>
<line hits="1" number="160"/>
<line hits="1" number="162"/>
<line hits="1" number="163"/>
<line hits="1" number="165"/>
<line hits="1" number="166"/>
Expand All @@ -188,11 +188,9 @@
<line hits="1" number="172"/>
<line hits="1" number="173"/>
<line hits="1" number="174"/>
<line hits="1" number="175"/>
<line hits="1" number="176"/>
<line hits="1" number="177"/>
<line hits="1" number="179"/>
<line hits="1" number="181"/>
<line hits="1" number="183"/>
</lines>
</class>
<class branch-rate="0" complexity="0" filename="mock_decorators/object_mock.py" line-rate="0" name="object_mock.py">
Expand Down
16 changes: 7 additions & 9 deletions mock_decorators/function_mock.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,7 @@ def wrapped_f(*args, **kwargs):


class FunctionMockCheckCall(object):
CALLED = 'called'
TIMES = 'times'

def __init__(self, entity, function_name, expected_times=0, return_value=None):
def __init__(self, entity, function_name, return_value=None, expected_times=None):
"""
This function checks if a function is invoked and the times that it is called. Optionally, the mock can return
a value instead invoke the function
Expand Down Expand Up @@ -170,11 +167,12 @@ def wrapped_f(*args, **kwargs):
finally:
if self.old_function:
setattr(self.entity, self.function_name, self.old_function)
if not self.times:
raise ValueError("The function {} has not been called. ".format(self.function_name))
if self.expected_times and self.expected_times != self.times:
raise ValueError("The function {} has been called {} times instead {}. "
.format(self.function_name, self.times, self.expected_times))

if self.expected_times is None and not self.times:
raise ValueError("The function {} has not been called.".format(self.function_name))
elif self.expected_times is not None and self.expected_times != self.times:
raise ValueError("The function {} has been called {} times instead {}. "
.format(self.function_name, self.times, self.expected_times))

return result

Expand Down
19 changes: 17 additions & 2 deletions tests/mock_decorators/test_function_mock.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ def inner_test():
self.assertEqual(result, 4, "The function result has been modified")

def test_call_check_invocations_ok(self):
@FunctionMockCheckCall(module_test, 'function_sum', 3)
@FunctionMockCheckCall(module_test, 'function_sum', expected_times=3)
def inner_test():
module_test.function_sum(2, 2)
module_test.function_sum(2, 2)
Expand All @@ -245,7 +245,7 @@ def inner_test():
self.assertEqual(result, 4, "The function result has been modified")

def test_call_check_invocations_ko(self):
@FunctionMockCheckCall(module_test, 'function_sum', 2)
@FunctionMockCheckCall(module_test, 'function_sum', expected_times=2)
def inner_test():
module_test.function_sum(2, 2)
module_test.function_sum(2, 2)
Expand Down Expand Up @@ -274,3 +274,18 @@ def inner_test():
result_no_change = module_test.function_sum(2, 2)
self.assertEqual(result_change, 0, "The function result has been modified")
self.assertEqual(result_no_change, 4, "The function result has been modified")

def test_check_no_call_ok(self):
@FunctionMockCheckCall(module_test, 'function_sum', expected_times=0)
def inner_test():
return 3

result_no_change = module_test.function_sum(2, 2)
self.assertEqual(result_no_change, 4, "The function result has been modified")

def test_check_no_call_ko(self):
@FunctionMockCheckCall(module_test, 'function_sum', expected_times=0)
def inner_test():
return module_test.function_sum(2, 2)

self.assertRaises(ValueError, inner_test)

0 comments on commit 1d6d6db

Please sign in to comment.