[Bài 10] Ý nghĩa của class base

Khi Duplicate code trong 1 class thì ta viết 1 function để dùng chung. Thế khi duplicate code ở 2 class khác nhau thì làm thế nào? Có 1 cách xử lý đó là viết 1 Class dùng dung.

Ở trong Java cũng như các ngôn ngữ lập trình hướng đối tượng khác, đều có khái niệm Class cha – con (superclass và subclass). Nó thể hiện tính thừa kế trong ngôn ngữ hướng đối tượng. Nếu bạn chưa biết thì nên đọc lại Java basic trước khi đọc tiếp.

Quay trở lại bài toán hiện tại, chúng ta cần viết thêm 1 Class test chức năng “tạo bài viết mới” với rất nhiều test case khác. Bên cạnh đó, class LoginTest và class AddNewPostTest có chung BeforeMethod và AfterMethod. Vậy thì ta có thể viết 1 classe BaseTest là class cha và để 2 Class kia kế thừa từ đó.

Class BaseTest như sau:

public class BaseTest {

	WebDriver driver;
	public static final String URL_login = "http://localhost/wp/wp-login.php";
    public static final String URL_dashBoard = "http://localhost/wp/wp-admin/";
	
    @BeforeMethod
	public void setUp() {
		driver = new FirefoxDriver();
		driver.get(URL_login);
	}

	@AfterMethod
	public void tearDown() {
		driver.quit();
	}

}

Bên cạnh việc tách 2 Method thì mình còn sửa lại 1 chút.

Class LoginTest sẽ phải thừa kế từ Class BaseTest thông qua keyword là extends.

public class LoginTest extends BaseTest{

	String URL_dashBoard = "http://localhost/wp/wp-admin/";
	String user_login = "user_login";
	String user_pass = "user_pass";
	String submitBtn = "wp-submit";

	public void login(String userName, String password) {
		driver.findElement(By.id(user_login)).sendKeys(userName);
		driver.findElement(By.id(user_pass)).sendKeys(password);
		driver.findElement(By.id(submitBtn)).click();
	}

    @Test
	public void loginWithBlankField() {
		login("", "");
		Assert.assertEquals(driver.getCurrentUrl(), BaseTest.URL_login);
	}

	@Test
	public void loginByAdmin() {
		login("giang", "123456789");
		Assert.assertEquals(driver.getCurrentUrl(), URL_dashBoard);
	}

}

NOTE: Class con sẽ được kế thừa toàn bộ các thuộc tính của class cha. Do đó ở class con sẽ không cần phải khai báo WebDriver driver nữa.

Class test của chúng ta ngày càng ngắn nhỉ. =)))) Thực ra là nó chia nhỏ thành nhiều Class khác nhau mà thôi. Dù thế nào đi chăng nữa, thì có vẻ nó cũng đang khá chuyên nghiệp. 😀

Vậy là 4 vấn đề ở bài trước, ta đã xử lý được thằng đầu tiên. Có vẻ bài hơi ngắn, xử lý thêm 1 vấn đề nữa nhé. ^^


  • Khi test manual thì mỗi lần test đâu có cần đóng browser rồi mở lại đâu nhỉ?

—> Không nên làm điều này với automation vì thực ra các case đúng nên phải re-new cái session. Mình làm chồng các test case sẽ có thể bị ảnh hưởng bởi trạng thái của các test case trước, dẫn đến việc kết quả sẽ có thể bị sai. Với lại việc sử dụng script làm giảm thời gian test rồi nên nó vẫn đáp ứng được yêu cầu về mặt thời gian test như manual.


Thế là chỉ còn 2 vấn đề nữa thôi nhỉ. Yeah. Những bài tiếp theo, mình vừa tạo thêm test case mới và vừa xử lý thêm các vấn đề khác. See you there! Thank you.

0 0 votes
Article Rating
Subscribe
Notify of
guest
17 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] ← Previous […]

trackback

[…] Vì cái Navigation này hầu như Page nào cũng sử dụng nên mình sẽ viết nó vào BasePage như mình đã nói ở bài 10. […]

Nguyễn Chung
Nguyễn Chung
3 years ago

Nếu muốn test cái chức năng tự động đăng nhập thì làm thế nào anh. Tức là khi bấm vào checkbox Remember, tắt trình duyệt. lần sau vào không cần đăng nhập lại ấy.

Bin
Bin
3 years ago

có phải bỏ các public ở class BaseTest đi không a, để public không chạy được ạ?

Lv
Lv
3 years ago

Trong class LoginTest thấy khai báo URL_dashBoard, nhưng URL_login lại không có, vậy có khác nhau gì không khi mà cả 2 đều sử dụng trong class này ?

Lv
Lv
3 years ago
Reply to  Giang Nguyen

à, vì mình thấy URL_dashBoard được khai báo ở cả 2 chỗ nên ko biết là nó khác gì với URL_login. 🙂

Hoàng Hiên
Hoàng Hiên
2 years ago

“Khi test manual thì mỗi lần test đâu có cần đóng browser rồi mở lại đâu nhỉ?”
Anh cho em hỏi chút ạ.Em muốn trên automation test , mỗi lần test không cần đóng browser thì làm như nào ạ.

Loan
Loan
1 year ago

Anh cho em hỏi vậy nếu một class Test khác có url khác url login ở trên thì đâu dùng class base ở trên được đúng không ạ, vậy mình xử lí như thế nào ạ?.
Em có nghĩ là đưa @beforeMethod ra ngoài class Test nhưng mà cảm thấy như vậy thì hơi dài.

Trần Loan
Trần Loan
1 year ago
Reply to  Giang Nguyen

Hi anh, sau khi đọc các bài tiếp theo trong series thì em đưa ra cách giải quyết là trong class BaseTest sẽ khai báo url đầu tiên là url login trong @beforeMethod, sau đó các class khác như Dashboad sẽ bắt đầu đi từ url login sau đó navigation sang url dashboard và thực hiện test.
Anh confirm giúp em cách làm như vậy có ổn không với ạ?