1

I've a class, say foo, in module 1.

    class foo():
       def __init__(var1, var2):
         self.var1 = var1
         self.var2 = var2
      
      def method1(self):
          pass
      def method2(self):
         pass

foo_ = foo("blah", "blah")

The foo_ object is widely used in various modules across the code base. I've to write a test for a method in module 2 which uses the foo_ object.

Module 2:

from module1 import foo_
import module3
def blah():
   foo_.method1()
   module3.random_method()
   return blah

The random_method in module 3 also imports and calls another method of foo_. I've a dummy foo_ object in my test module.The test is for the blah method. Here's what I've so far.

Test Module:

from module1 import foo
from module2 import blah

@pytest.fixture()
def dummy_foo_():
 var1 = 'blah'
 var2 = 'blah'
 return foo(var1,var2)

def test_blah(dummy_foo_):
 assert blah() == 'blah'

Is there a way I can get the test_blah to work where the blah method would use the dummy foo_ object instead of the one imported in the module 1?

1

1 Answer 1

2

You can use mock.patch to temporarily patch module1.foo_ with dummy_foo_ by using it as a context manager

from mock import patch
def test_blah(dummy_foo_):
    with patch('module1.foo_', dummy_foo_) as mock:
        assert blah() == 'blah'
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.