Enum trong java là một kiểu dữ liệu đặc biệt của Java được sử dụng để định nghĩa các tập hợp các hằng số. Cụ thể hơn, Java enum là một kiểu đặc biệt của lớp trong java. Một enum có thể chứa các trường, phương thức và Constructor.
Enum có phải là class ?
Enum không phải class nhưng nó cũng có một điểm tương đồng với class trong các ngôn ngữ Java, C/C++,… Nó dùng để khai báo một tập các giá trị hằng số không thay đổi ví dụ: các ngày trong tuần, tháng trong năm, các webdriver (CHROME, EDGE, FIREFOX,…)…
Sử dụng Enum như thế nào ?
Có rất nhiều cách khai báo enum
Khai báo trong class:
public class EnumExample1 {
// define enum
enum Season {
SPRING, SUMMER, FALL, WINTER;
}
public static void main(String[] args) {
Season season = Season.WINTER;
System.out.println(season);
}
}
Bên ngoài class
enum Season {
SPRING, SUMMER, FALL, WINTER;
}
public class EnumExample2 {
public static void main(String[] args) {
Season season = Season.WINTER;
System.out.println(season);
}
}
Định nghĩa enum là 1 file riêng
public enum Season {
SPRING, SUMMER, FALL, WINTER;
}
Gọi dùng trong một class khác
public class EnumExample3 {
public static void main(String[] args) {
Season season = Season.WINTER;
System.out.println(season);
}
}
Phương thức values() trong enum
Phương thức values() trong enum là một phương thức tự động được sinh ra trong hầu hết các ngôn ngữ hỗ trợ enum, như Java và Kotlin. Phương thức này trả về một mảng chứa tất cả các hằng số (constant) đã được định nghĩa trong enum. Nhờ phương thức này, bạn có thể dễ dàng duyệt qua các giá trị của enum.
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
public class Main {
public static void main(String[] args) {
for (Day day : Day.values()) {
System.out.println(day);
}
}
}
Sử dụng switch case để lấy các giá trị trong enum
Khai báo các constant WebDriver
package core;
public enum BrowserList {
CHROME, FIREFOX, EDGE, SAFARI, OPERA, HEAD_CHROME, HEAD_FIREFOX ;
}
Dùng switch case để duyệt giá trị phù hợp
package core;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
public class BaseTest {
WebDriver driver;
protected WebDriver getBrowserDrive(String browserName){
BrowserList browser = BrowserList.valueOf(browserName.toUpperCase());
switch (browser){
case CHROME :
driver = new ChromeDriver();
break;
case EDGE :
driver = new EdgeDriver();
break;
case FIREFOX :
driver = new FirefoxDriver();
break;
case SAFARI :
driver = WebDriverManager.safaridriver().create();
break;
case OPERA :
driver = WebDriverManager.operadriver().create();
break;
default:
throw new RuntimeException("Pls enter the correct Browser name");
}
driver.manage().window().setPosition(new Point(0,0));
driver.manage().window().setSize(new Dimension(1920,1080));
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(15));
return driver;
}
}
Dùng switch case ta có thể chọn ra webdriver phù hợp cho testcase
Kết luận
Khi bạn có một tập hợp các giá trị cố định, chẳng hạn các trạng thái, ngày trong tuần, loại tài khoản, v.v., enum sẽ là lựa chọn hợp lý, giúp mã nguồn rõ ràng và an toàn hơn so với việc dùng các hằng số riêng lẻ hoặc chuỗi.