Рекомендации по обеспечению порядка методов тестирования

Django 1.9. Я хочу проверить, что входные формы обычно невидимы. И только когда пользователь нажимает кнопку переключения меню, появляются элементы ввода логина и пароля.

Проблема в том, что это все о методах класса. Я хочу быть уверен, что один метод выполняется раньше другого. Я нашел это решение с 0 и 1 в именах методов.

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.")

Кажется, это работает. Не могли бы вы сказать мне, есть ли какая-то общеизвестная методология для таких случаев. Может быть, какой-то передовой опыт.

Я только что начал Django, и я не думаю, что мое решение сразу лучшее.

Вот почему я решил спросить тебя. Заранее спасибо.

1 ответ

  1. Рекомендуется, чтобы порядок ваших методов тестирования не имел значения вообще , и если вы наследуете отdjango.test.TestCase, это не должно иметь значения. Я, однако, был в ситуации, когда я хотел протестировать функцию 'foo'в одном методе, а затем, для удобства (например, не нужно упаковывать егоtry-except), предположите, что он работает должным образом в других методах, которые тестируют что-то другое ( 'bar').

    Я назвал свои методы тестирования

    test_a_foo
    test_b_bar
    

    Это кажется более подходящим, чем использование чисел, потому что тесты выполняются в лексикографическом порядке, где, например

    test_11_eleven
    

    выполняется до

    test_2_two
    

    Если после этого потребуется вставить другой тест, можно изменить имена на:

    test_b1_first_b
    test_b2_second_b