2017-05-24 2 views
0

Ich baue meine erste CherryPy-Anwendung und möchte eine Methode testen, die nicht öffentlich sichtbar sein sollte (nicht ausgesetzt) ​​Ich kann die Methode völlig in Ordnung, wenn es ausgesetzt ist aber ich frage mich, ob theres a Möglichkeit, die Methode abhängig davon, welche Datei die Funktion aufruft, freizugeben. Zum Beispiel, wenn die Funktion so aufgerufen wird, wenn sie von der mainApp aufgerufen wird, wird sie nicht angezeigt, aber wenn sie von der Testdatei aufgerufen wird, wird sie offen gelegt.CherryPy expose Funktion nur beim Testen

the code I was thinking of is along the lines of 

if __name__ != '__main__': @cherrypy.expose 
def supersecretmethod(self) 

jedoch kann ich diese nicht funktioniert sehen und haben einige der Forschung getan, aber kann nicht scheinen, um herauszufinden, wie dies zu tun, irgendwelche Vorschläge? Dank

Antwort

2

Sie benutzerdefinierten Dekorateur für diesen Zweck verwenden können:

def expose_if_not_main(func): 
    if __name__ != '__main__': 
     return cherrypy.expose(func) 
    else: 
     return func 


@expose_if_not_main 
def supersecretmethod(self): 
    return 'result' 
+0

Dank ist dies exaclty was ich :) – AmatuerCoder101

+0

Es ist ein schöner Dekorateur, aber in Bezug auf ** ** Test es wäre besser, wollte Patch die Offenheit der Methode. Smth wie: 'unittest.mock.patch (WebAppClass.supersecretmethod, 'exposed', create = True, side_effect = True)' – webKnjaZ