在一起运行所有Djangonose测试时未注入模拟类

2024-06-16 09:37:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个奇怪的问题,这个问题似乎来自python单元测试如何管理它们的导入以及这与模拟包的关系。这是针对django项目的,使用django nose/nose进行单元测试运行,mock用于模拟。在

我有一个使用mock的单元测试,它在单独运行时工作得非常好(python管理.py测试测试_代码.py)在

内部测试_代码.py公司名称:

from my.app.models.bookstore import create_from_proxy

class MockTestCase( TestCase ):

    def setUp( self ):
        self.patcher = patch( 'my.app.models.bookstore.BookProxy', autospec=True )
        self.mock_proxy = self.patcher.start()
        self.proxy_instance = self.mock_proxy.return_value
        self.proxy_instance.json = json.loads(BOOK_JSON)

    def tearDown( self ):
        self.patcher.stop()

    def test_mock_works( self ):
        book_id = 55
        v = create_from_proxy( book_id )
        self.assertTrue( self.mock_proxy.called )
        ... more tests ...

内部书店.py公司名称:

^{pr2}$

但是,当我作为整个测试套件的一部分运行这个测试时(python管理.py测试)则测试失败,因为书店.py代码没有注入mock类,而是返回到BookProxy的实际代码。在

因此,当所有测试一起运行时,似乎有一些有状态的东西在进行,但我无法找出是什么导致了模拟注入失败。其他使用mock all的单元测试似乎在它们自己之后清理(要么使用decorator、上下文,要么使用我在这里展示的显式patch对象方法)。在

像这样的事以前见过吗?在


Tags: django代码frompyself名称appmy