2014-08-29 4 views
0

Я ищу наилучшую практику для написания тестового примера в селене с помощью JUnit.Использование if/switch/для условий в тестовом примере

Если какой-либо тест использует переключатель или если он должен быть разделен на разные тестовые случаи, чтобы избежать условий или использования условий в тесте, это «нормально» ? И почему?

Edit: мне нужно знать, если у вас есть возможность расколоть тест, который использует, если & переход на меньший тест, чтобы избежать использования условий в них, вы бы предпочли, чтобы разделить его или ты в порядке использования условия внутри вашего теста селенита юнита?

Спасибо :-)

+1

Можете привести пример того, что вы сейчас делаете? Я не уверен, что понимаю, что вы пытаетесь выполнить. – user1071777

ответ

3

Это может помочь ...

Тесты должны быть простыми. БЫСТРО. НЕЗАВИСИМАЯ. и IDEMPOTENT

Если у вас есть большой switch или if лестница, то да. Вы должны разделить их на разные тесты. Рассмотрим следующий пример: (это с помощью getting-started-with-selenium рамки)

@Test @Config(url="http://someurl.com", browser = Browser.CHROME) 
public void myLongTest() { 
    setText("#username", "some_username") 
    .setText("#password", "some_password") 
    .click("#btn-login") 
    .store("some_variable", getText("#element"); 
    // some_variable will be "a" | "b" | "c" 
    switch ((String) get("some_variable")) { 
    case "a": 
     click("#a") 
     .validatePresent("#something"); 
     break; 
    case "b": 
     click("#b") 
     .validatePresent("#something-else"); 
     break; 
    case "c": 
     click("#c") 
     .validatePresent("#something-else-else"); 
     break; 
    } 
} 

Вместо длинного теста вы могли делим это на три различных тестовых случаев, по одному для каждого, который по традиционным стандартам было бы хорошо, потому что тогда тесты будут быстрее.

@Test @Config(url="http://someurl.com", browser = Browser.CHROME) 
public void myShortTest_CaseA() { 
    setText("#username", "some_username") 
    .setText("#password", "some_password") 
    .click("#btn-login") 
    .click("#a") 
    .validatePresent("#something"); 
} 

@Test @Config(url="http://someurl.com", browser = Browser.CHROME) 
public void myShortTest_CaseB() { 
    setText("#username", "some_username") 
    .setText("#password", "some_password") 
    .click("#btn-login") 
    .click("#b") 
    .validatePresent("#something-else"); 
} 

@Test @Config(url="http://someurl.com", browser = Browser.CHROME) 
public void myShortTest_CaseA() { 
    setText("#username", "some_username") 
    .setText("#password", "some_password") 
    .click("#btn-login") 
    .click("#c") 
    .validatePresent("#something-else-else"); 
} 
1

Тестовый случай не должен иметь условия, потому что вы должны знать входы априорно. Единственное условие, о котором я могу думать, когда это неверно, - это то, что ваш тестовый файл должен быть переносимым в разных средах, поэтому у вас будут ветви в нем, в зависимости от того, в какой среде он выполняется. Однако даже в этом случае он должен тестировать один аспект вашей программы (например, в Selenium, вы можете написать тест, чтобы нажать кнопку и проверить его эффект). Чтобы проверить несколько аспектов, напишите несколько тестовых примеров.