2017-09-01 9 views
2

私はnmapを使ってネットワーク内のデバイスをスキャンするビュー関数を持っています。djangoアプリケーションのテストでモックを使用して関数をオーバーライドする

views.py

import nmap 
def home(request): 

    y=nmap.PortScanner() 

    data = y.scan(hosts="192.168.1.*", arguments="-sP") 
    context[status]=data['status']['addresses']['ipv4'] 
    return render_template('home.html',context) 

今私はno devices1 device connected2 or more device connectedのためにこれをテストしたいです。私はtests.pyのデータをオーバーライドする必要があります。

モック機能を使ってやっていると思っていました。私はtests.pyでオーバーライドすることができますが、応答をシミュレートすると、ビュー関数でオーバーライドされません。

このnmap関数をテストするにはどうすればよいですか?

答えて

1

あなたのケースでは、猿のパッチが良い解決策になります。

はまた、もちろん、あなたのテストフレームワークにこれを統合する必要があり、ここで

可能な実装があるのパッチ適用猿についてthis SO質問を見てみましょう。

import your_module 

class MockPortScanner(object): 

    # by setting this class member 
    # before a test case 
    # you can determine how many result 
    # should be return from your view 
    count = 0 

    def scan(self, *args, **kwargs): 
     return { 
      'status': { 
       'addresses': { 
        'ipv4': [i for i in range(self.count)] 
       } 
      } 
     } 

def your_test_method(): 
    MockPortScanner.count = 5 

    request = None # create a Mock Request if you need 

    # here is the mocking 
    your_module.nmap.PortScanner = MockPortScanner 

    # call your view as a regular function 
    rv = your_module.home(request) 

    # check the response 

UPDATE

は、テストの他の部分で、後で元ポートスキャンを持ってnmapのインポート後のテストでそれを保存します。

views.nmap.PortScanner = OriginalPortScanner 
+0

your_moduleは右、私のviews.pyを意味します

import nmap OriginalPortScanner = nmap.PortScanner 

次に、あなたができるように(オリジナルまたはモックのいずれか)ポートスキャンを選択するのだろうか? –

+0

おそらくはい。あなたのホームビューが定義されているモジュールです。実際には、次のようになります: 'yourapp import views'から – ohannes

+0

しかし、ここでは模擬機能がどのように機能しますか。モックからのインポートはありません。 MockPortScannerのオブジェクト引数は何でしょうか? –

関連する問題