Thứ Hai, 20 tháng 3, 2006

eXo-Platform 3.x

Ngày hôm nay bắt đầu chuyển qua code platform v3.x. Phiên bản này đã sử dụng TestNG thay cho JUnit, như vậy sẽ có cơ hội nghiên cứu TestNG mà nhiều người khen ngợi là hay hơn JUnit. Độ này nhiều kiến thức cần phải học nhiều quá: công nghệ và cả kiến thức nền còn thiếu sót. Phù, mệt. Vẫn chịu khó viết blog, hôm nay thì lượng truy cập đã vượt qua con số 20.000. Tự dưng biết được blogspot được viết bằng Struts chạy trên Tomcat 4.1.24, hi hay nhỉ. Vậy mà có người bảo Goo hờ hững với Java.

9 nhận xét:

  1. Vớ vẩn, Google lôi kéo bao nhiêu tai to mặt nhớn của Sun mà lại kêu hờ hững với Java.

    Xài TestNG xem có gì cập nhật thông tin anh nhé. Anh xài nhưng toàn thứ đơn giản thôi. :-(

    Trả lờiXóa
  2. ok, xếp config chạy khá ngon với TestNG rồi, hy vọng học hỏi xếp được nhiều rồi mang lên blog bàn luận.

    Trả lờiXóa
  3. Hừm các bác bị test-infected rồi. Đi khám đi không kẻo đổ bệnh lại kêu là không cứu. ;)

    Trả lờiXóa
  4. hic, chắc bị rồi anh à.

    Đang gặp vấn đề về muốn test một hàm với TestNG mà hàm đó lại khởi động 1 hàm khác. Nếu như hàm bị phụ thuộc mà có @Configuration thì TestNG không tìm ra :testXXX() is depending on nonexistent method initYYY() đang tìm phương án tối ưu nhất cho giải pháp này.

    Trả lờiXóa
  5. ok, ổn rồi chỉ cần thêm khai báo group sẽ phụ thuộc vào Configuration là ổn. Bây giờ thì có thể test được riêng lẻ một hàm rất ok. Bắt đầu hiểu dần bản chất của TestNG.

    Trả lờiXóa
  6. Không hiểu nghĩa "test được riêng lẻ một hàm"

    Anh cũng chưa rõ lý do gì em phải xài @Configuration cho thằng phụ thuộc kia.

    Trả lờiXóa
  7. một lớp test bao gồm nhiều hàm test đảm nhận việc test những chức năng khác nhau . nhưng đôi khi cài đặt chỉ cần test một hàm nào đó trong lớp test (nhanh và report dễ nhìn hơn) thì chạy test hàm đó. Trước dùng JUnit cũ cũng không rành lắm nên cứ phải chạy hết cả các hàm. Bây giờ bập bọe TestNG, biết cái này có khả năng chỉ chạy một hàm test trong lớp test. Giờ thì ok rồi.

    Theo định nghĩa thì @Configuration Annotation để chỉ ra một số thông tin ban đầu cho lớp test (Java 5). Tuy nhiên khi chạy cả lớp test thì ok nhưng nếu chạy group test thì việc setup này không được thực hiện. Giả dụ tụi em có một lớp ContainerTest với một số hàm cơ bản để test như sau :

    @Test(groups = {"org.exoplatform.container", "working"}, enabled = true)
    public class ContainerTest {
      @Configuration(beforeTestClass = true)
      public static void setupClass() throws Exception {
        String[] confURL = {
          "classpath:/META-INF/integration-test-configuration.xml",
          "classpath:/META-INF/unit-test-configuration.xml"
        } ;
         ContainerManager.setupTestContainer(confURL) ;
      }

    ....


    và hàm cần test với việc khai báo group test
      @Test(groups = {"thuan"})
        public void testTestContainer() throws Exception {
          Container container = ContainerManager.getInstance().getContainer("TestContainer") ;

          TestComponent component =
            (TestComponent) container.getComponentInstanceOfType(TestComponent.class) ;
          Assert.assertTrue(component != null) ;
        }

    ...

    khi muốn chạy test với lệnh testng.groups=thuan thì hàm test bị fail do container chưa setup được dữ liệu ban đầu cho test. Mày mò mãi thì mới biết cần phải khai báo thêm group=thuan trong @Configuration. tức là sửa lại một chút như sau:

      @Configuration(beforeTestClass = true, groups="thuan")
        public static void setupClass() throws Exception {
          String[] confURL = {
            "classpath:/META-INF/integration-test-configuration.xml",
            "classpath:/META-INF/unit-test-configuration.xml"
          } ;
    ContainerManager.setupTestContainer(confURL) ;
        }

    bây giờ thì chạy ok

    Mới mày mò đến TestNG, chưa rành về khoản test này lắm vì trước xài (một cách máy móc) JUnit do được config sẵn trong eXo nên cũng không tìm hiểu nhiều. Bây giờ thử nghiên cứu TestNG nên vẫn còn lơ mơ. Hy vọng ông anh chia sẻ ít kinh nghiệm.

    Trả lờiXóa
  8. Vụ này lúc nãy nói rồi ko nói lại.

    Assert.assertTrue(component != null) em có thể thay bằng assert (component != null) được. Trông có vẻ đơn giản, sáng sủa hơn.

    Trả lờiXóa

nhudinhthuan@gmail.com