@@ -715,6 +715,53 @@ def method(self): pass
715
715
self .assertRaises (StopIteration , mock .method )
716
716
717
717
718
+ def test_magic_method_wraps_dict (self ):
719
+ data = {'foo' : 'bar' }
720
+
721
+ wrapped_dict = MagicMock (wraps = data )
722
+ self .assertEqual (wrapped_dict .get ('foo' ), 'bar' )
723
+ self .assertEqual (wrapped_dict ['foo' ], 'bar' )
724
+ self .assertTrue ('foo' in wrapped_dict )
725
+
726
+ # return_value is non-sentinel and takes precedence over wrapped value.
727
+ wrapped_dict .get .return_value = 'return_value'
728
+ self .assertEqual (wrapped_dict .get ('foo' ), 'return_value' )
729
+
730
+ # return_value is sentinel and hence wrapped value is returned.
731
+ wrapped_dict .get .return_value = sentinel .DEFAULT
732
+ self .assertEqual (wrapped_dict .get ('foo' ), 'bar' )
733
+
734
+ self .assertEqual (wrapped_dict .get ('baz' ), None )
735
+ with self .assertRaises (KeyError ):
736
+ wrapped_dict ['baz' ]
737
+ self .assertFalse ('bar' in wrapped_dict )
738
+
739
+ data ['baz' ] = 'spam'
740
+ self .assertEqual (wrapped_dict .get ('baz' ), 'spam' )
741
+ self .assertEqual (wrapped_dict ['baz' ], 'spam' )
742
+ self .assertTrue ('baz' in wrapped_dict )
743
+
744
+ del data ['baz' ]
745
+ self .assertEqual (wrapped_dict .get ('baz' ), None )
746
+
747
+
748
+ def test_magic_method_wraps_class (self ):
749
+
750
+ class Foo :
751
+
752
+ def __getitem__ (self , index ):
753
+ return index
754
+
755
+ def __custom_method__ (self ):
756
+ return "foo"
757
+
758
+
759
+ klass = MagicMock (wraps = Foo )
760
+ obj = klass ()
761
+ self .assertEqual (obj .__getitem__ (2 ), 2 )
762
+ self .assertEqual (obj .__custom_method__ (), "foo" )
763
+
764
+
718
765
def test_exceptional_side_effect (self ):
719
766
mock = Mock (side_effect = AttributeError )
720
767
self .assertRaises (AttributeError , mock )
0 commit comments