wiki

View on GitHub

clean code trong việc viết unit test

1. Sử dụng tên test case mô tả chính xác và rõ ràng:

bad

public function test1() {
    // ...
}

good

public function testViewListContractSuccess() {
    // ...
}

2. Giới hạn mỗi test case chỉ kiểm tra 1 điều kiện

bad

public function testViewCreateSuccessAndCreateContractSuccess() {
    // ...
}

good

public function testViewCreateContractSuccess() {
    // ...
}

public function testCreateContractSuccess() {
    // ...
}

3. Sử dụng dữ liệu mẫu cho việc khởi tạo và chuẩn bị dữ liệu

bad

public function testFunctionAddItemToCartSuccess() {
    // Arrange
    $cart = new Cart();
    $item = new Item("Sample Item", 10.99);
    
    // Act
    $cart->addItem($item);
    
    // Assert
    $this->assertEquals(1, $cart->getItemCount());
}

good

public function testFunctionAddItemToCartSuccess() {
    // Arrange
    $cart = new Cart();
    $item = $this->createSampleItem();
    
    // Act
    $cart->addItem($item);
    
    // Assert
    $this->assertEquals(1, $cart->getItemCount());
}

private function createSampleItem() {
    return new Item("Sample Item", 10.99);
}

4. Sử dụng helper functions để tránh lặp lại code:

bad

public function testAddItemToCart() {
    // Arrange
    ...
    
    // Act
    $cart->addItem($item);
    
    // Assert
    $this->assertEquals(1, $cart->getItemCount());
    $this->assertTrue($cart->containsItem($item));
}

public function testRemoveItemFromCart() {
    // Arrange
    ...
    
    // Act
    $cart->removeItem($item);
    
    // Assert
    $this->assertEquals(0, $cart->getItemCount());
    $this->assertFalse($cart->containsItem($item));
}

good

public function testAddItemToCart() {
    // Arrange
    ...
    
    // Act
    $cart->addItem($item);
    
    // Assert
    $this->assertCartContainsItem($cart, $item);
}

public function testRemoveItemFromCart() {
    // Arrange
    ...
    $cart->addItem($item);
    
    // Act
    $cart->removeItem($item);
    
    // Assert
    $this->assertCartDoesNotContainItem($cart, $item);
}

//helper function

private function assertCartContainsItem(Cart $cart, Item $item) {
    $this->assertEquals(1, $cart->getItemCount());
    $this->assertTrue($cart->containsItem($item));
}

private function assertCartDoesNotContainItem(Cart $cart, Item $item) {
    $this->assertEquals(0, $cart->getItemCount());
    $this->assertFalse($cart->containsItem($item))
}