django 视图中的依赖注入

我想为我的 django 项目使用依赖注入。为此,我正在尝试pinject包。就像在 ASP.NET 中一样,所有依赖项都在构造函数中给出,这非常好,因为它很容易测试。我也想在我的 django 项目中存档类似的东西。


我有一个简单的视图:


class MySimpleView(View):

    def __init__(self, dependency1, dependency2, **kwargs):

        super().__init__(**kwargs)

        ...

我定义绑定的地方


# di.py

class AppBindingSpec(pinject.BindingSpec):

    def configure(self, bind):

        # do the bindings here



obj_graph = pinject.new_object_graph(binding_specs=[AppBindingSpec()])

我希望像这样使用它。


# urls.py

urlpatterns = [

    path('path/to/my/view', obj_graph.provide(MySimpleView).as_view()),

]

但不幸的是,django 不允许.as_view()从实例中调用 。


有什么简单的方法可以将依赖项注入到我的视图中,以便我可以轻松地模拟和测试?


慕田峪9158850
浏览 186回答 1
1回答

凤凰求蛊

如果您的目标是为自己提供一种简单且安全的“模拟和测试”方式,那么您可能最好使用由提供的模拟库unittest(顺便说一下,它也很像 .NET 中的模拟)。有了这个,你可以做这样的事情:from unittest.mock import Mock, patchfrom django.tests import TestCaseclass MySimpleViewTestCase(TestCase):    @patch('module_name.dependency2')    @patch('module_name.dependency1.specific_method_or_attribute')    def test_something_about_mysimpleview(self, mock_dependency1, mock_dependency2):        mock_dependency1.return_value = Mock(some_attribute="foo", some_method.return_value="bar")        mock_dependency2.return_value = 42        # do your testing of MySimpleView现在,当测试运行时,将用模拟对象mock替换任何内容。因此,当运行时,它将返回,而将返回一个对象,该对象具有一个带有值的属性和一个返回的方法。module_name.dependency1.specific_method_or_attributemodule_name.dependency2module_name.dependency2()42specific_method()Mock"foo"some_method()"bar"您可以使用它来模拟函数、类甚至模块。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python