Java Selenium 테스트에서 '최종'변수 사용
이것은 프로그래밍 질문으로 간주 될 수 있지만 Selenium과 Java로 작성된 테스트 코드에 관한 것이므로 게시 할 관련 사이트라고 생각합니다.
다른 사람의 테스트를 온라인으로 볼 때 final다음 과 같이 선언 된 변수에 웹 요소가 추가되는 경우가 있습니다 .
final WebElement element = driver.findElement(By.id("element-id"));
나는 그것이 더 나은 원자화와 테스트의 격리를 허용한다고 생각하고 있으며 그것은 의미가 있습니다.
변수를 final로 선언하지 않는 데 문제가 없었기 때문에 더 많은 이유가 있습니까?
답변
이것은 코드의 버그를 줄이기위한 표준 프로그래밍 관행입니다. 다시 말해서 최종 수정자는 기본 변수 또는 객체 참조 변수가 재 할당되는 것을 방지합니다. 따라서 프리미티브는 불변이며 참조는 처음에 가리키는 객체를 항상 가리킬 수 있습니다. (이는 호출 할 수있는 메서드에 영향을주지 않으며 객체의 내부 상태를 변경하는 메서드에도 영향을주지 않습니다.)
지난 10 년 동안 제가 사용한 모든 IDE는 메서드에서 코드를 검사하고 초기화 된 후 다시 할당되지 않은 지역 변수에 최종 수정자를 결정적으로 적용 할 수있는 기능을 가지고 있습니다. 이 아이디어는 코드를 작성하고 저장 한 경우 (최종 수정자를 적용하는 저장 작업을 실행 함) 해당 변수를 다시 수정하지 않을 수 있다는 것입니다. 해당 변수를 수정하려는 경우 수정자를 제거하기 만하면됩니다. 이 논리 하에서 모든 변수는 누군가가 그럴 수 없다고 적극적으로 결정할 때까지 최종적입니다.
모든 프로그래밍과 마찬가지로 이에 대한 반론이 있습니다. 하나는 코드를 복잡하게 만들어 코드를 유지하기 위해 코드를 읽으려는 프로그래머의 작업 부하를 증가 시킨다는 것입니다. 이것이이 수정 자에 대한 개인적인 경험은 아니지만, 다른 관행과 함께 있었음을 알고 있으므로 단순히 적용되지 않는다는 이유로 이것을 완전히 무시하고 싶지 않습니다. 다른 하나는 최종적으로 결정해야한다고 결정한 변수에만 사용하는 경우 (최종 코드로 코드를 덮는 것과는 반대로) 다른 개발자에게이 변수가 절대 변경되어서는 안된다는 메시지를 보냅니다. 변수를 변경하지 않아야합니다.
병렬 실행 사용 제한에 대한 PDHide의 의견은 관련이 있습니다. 최종 변수는 람다 및 병렬 처리에서 사용할 수 있지만 다른 변수는 사용할 수 없습니다. 이제는 Java 컴파일러가 명시 적으로 최종적 이지 않은 경우에도 효과적으로 최종 변수를 사용할 수 있다고 믿습니다. 그러나 누군가가 병렬 실행 전에 변수를 수정하기로 결정하면 컴파일러는 더 이상 말할 수 없습니다. 사실상 최종적이므로 더 이상 병렬 처리에 적합하지 않으며 컴파일 오류가 발생합니다. 쉽게 고칠 수 있지만 그럼에도 불구하고 성 가실 수 있습니다.
하루가 끝나면 팀과 간단한 대화를 통해 자신에게 가장 적합한 것이 무엇인지 결정하는 것이 좋습니다. 키워드는 실제 실행이나 효율성에 전혀 영향을 미치지 않으며 프로그래머 생산성의 문제입니다.