Django:出于测试目的而阻止Internet连接

Iva*_*nov 4 python testing django unit-testing

我想确保我的单元测试不会尝试连接到Internet,是否有办法在引发异常的情况下引发异常?

Python有一个类似的问题:出于测试目的而阻止网络连接吗?,但是那里提出的解决方案阻止了所有套接字连接,包括数据库连接,这对于Django测试是不可接受的。

Iva*_*nov 5

找到了一种方法来做到这一点。您可以将其粘贴到您的设置中。

if 'test' in sys.argv:

    # Block Internet access during tests
    import urllib2
    import httplib
    import httplib2

    def _raise_http_error(*args, **kwargs):
        raise urllib2.URLError("I told you not to use the Internet!")

    class AngryHandler(urllib2.BaseHandler):
        handler_order = 1

        def default_open(self, req):
            _raise_http_error()

    opener = urllib2.build_opener(AngryHandler)
    urllib2.install_opener(opener)

    _HTTPHandler = urllib2.HTTPHandler
    urllib2.HTTPHandler = AngryHandler

    httplib.HTTPConnection.connect = lambda self: None
    httplib.HTTPSConnection.connect = lambda self: None
    httplib.HTTPConnection.request = _raise_http_error
    httplib.HTTPSConnection.request = _raise_http_error
    httplib2.Http.request = _raise_http_error
Run Code Online (Sandbox Code Playgroud)