2016-05-22 19 views
0

Django 1.9. Ich möchte testen, dass Eingabeformulare normalerweise unsichtbar sind. Und nur wenn ein Benutzer die Umschaltmenü-Taste drückt, erscheinen Login- und Passworteingabeelemente.Best Practice zur Sicherstellung der Testmethoden

Das Problem ist, dass dies alles über Methoden einer Klasse ist. Ich möchte sicher sein, dass eine Methode vor einer anderen ausgeführt wird. Ich habe diese Lösung mit 0 und 1 in Methodennamen gefunden.

class FuncTestTablets(TestCase): 

    @classmethod 
    def setUpClass(cls): 
     pass 

    @classmethod 
    def tearDownClass(cls): 
     pass 

    def test_0_tablets_login_input_form_absent(self): 
     # At home page with tablet screen size Edith sees no login input element. 
     ## 0 is for stating explicitly that this test goes before the ones with 1 in their name. 
     self.browser.get('http://localhost:8000') 
     login_input = self.browser.find_element_by_id('login')   
     self.assertFalse(login_input.is_displayed(), "Login input element is visible on large devices") 

    def test_1_tablets_login_input_form_present_when_menu_button_pressed(self): 
     # At home page Edith presses menu button and login input appears. 
     ## 1 is for stating explicitly that this test goes after the ones with 0 in their name. 
     menu_button = self.browser.find_element_by_class_name('navbar-toggle') 
     menu_button.click() 
     login_input = self.browser.find_element_by_id('login') 
     self.assertTrue(login_input.is_displayed(), "Login input element is not visible on tablet devices when menu button is pressed.") 

Dies scheint zu funktionieren. Können Sie mir sagen, ob es für solche Fälle eine allgemein bekannte Methode gibt? Vielleicht eine Best Practice.

Ich habe gerade angefangen Django und ich denke nicht, dass meine Lösung sofort die beste ist.

Deshalb habe ich beschlossen, Sie zu fragen. Vielen Dank im Voraus.

Antwort

0

Best Practice ist, dass die Reihenfolge Ihrer Testmethoden überhaupt keine Rolle spielt und wenn Sie von django.test.TestCase erben, sollte es keine Rolle spielen. Ich war jedoch in der Situation, in der ich ein Feature in einer Methode testen wollte und dann, aus Bequemlichkeit (wie nicht in try-except wrap), dass es funktioniert in anderen Methoden, die etwas anderes ('bar').

nannte ich meine Testmethoden

test_a_foo 
test_b_bar 

Diese mit Zahlen dann besser geeignet scheint, weil Tests in lexikographische Reihenfolge ausgeführt werden, wo z.B.

test_11_eleven 

wird ausgeführt, bevor

test_2_two 

Wenn Sie dann später ein weiterer Test einfügen müssen, können Sie immer noch die Namen ändern:

test_b1_first_b 
test_b2_second_b