Простые правила написания функциональных автотестов.
2008-05-06 23:00:25 (читать в оригинале)
1) Имя метода автотеста должно ясно описывать, что этот тест делает. Например:
testLogin будет более информативным именем для автотеста, чем test1_1.
Какие плюсы могут быть от такого именования автотестов?
- Вам будет проще ориентироваться в тестах.
- Другим будет проще их использовать и поддерживать.
2) Лишняя логика в методе автотеста будет только усложнять его. Посмотрим на следующий тест :
public testPostMessage() {
selenium.type("id=title", "Hello world");
selenium.type("id=text", "and everybody!!!");
for (int i = 0; i < 3; i++) {
selenium.type("id=tags" + i, "test post" + i);
}
selenium.select("id=access", "label=all");
selenium.click("id=submit");
}
Даже с простыми idшками не сразу можно понять что происходит в автотесте. Немного упростим его:
private void setMessageTitle(String title) {
selenium.type("id=title", title);
}
private void setMessageText(String text) {
selenium.type("id=text", text);
}
private void setMessageTags(String tag){
for (int i = 0; i < 3; i++) {
selenium.type("id=tags" + i, tag + i);
}
}
private void setMessageAccess(String access){
selenium.select("id=access", "label=" + access);
}
private void submit(){
selenium.click("id=submit");
}
public testPostMessage() {
setMessageTitle("Hello world");
setMessageText("and everybody!!!");
setMessageTags("test post")
setMessageAccess("all")
submit();
}
Код автотеста увеличился в размере, но при этом сам автотест стал более понятным.
3) Метод автотеста должен быть коротким настолько, насколько это возможно. Основной плюс опять же в простоте понимания такого теста. Например, есть два автотеста:
public void testLogin() {
goToLoginForm();
enterLogin();
enterPass();
clickLogin();
assertTrue(isLoggedIn());
}
и
private void login() {
goToLoginForm();
enterLogin();
enterPass();
clickLogin();
}
public void testLogin() {
login();
assertTrue(isLoggedIn());
}
Второй автотест выглядит более понятным, несмотря на простоту примеров. С ростом размеров автотеста, количества автотестов, разница между первым и вторым вариантами написания автотеста будет ощущаться все больше и больше.
4) С помощью констант можно сделать код автотестов более понятными. Есть следующий тест:
public void testPassword() {
assertTrue(login.isPasswordValid("qwerty"));
assertFalse(login.isPasswordValid("asdf"));
}
Добавим в этот автотест несколько констант, и код станет более понятным :
String validPassword = "qwerty";
String inValidPassword = "asdf";
public void testPassword() {
assertTrue(login.isPasswordValid(validPassword));
assertFalse(login.isPasswordValid(inValidPassword));
}