GWT - Tích hợp JUnit

GWT cung cấp hỗ trợ thực thi để kiểm tra tự động mã phía máy khách bằng cách sử dụng khung kiểm tra JUnit. Trong bài viết này, chúng tôi sẽ trình bày sự tích hợp GWT và JUNIT.

Tải xuống kho lưu trữ Junit

Trang web chính thức của JUnit - https://www.junit.org

Tải xuống Junit-4.10.jar

Hệ điều hành Tên lưu trữ
các cửa sổ junit4.10.jar
Linux junit4.10.jar
Mac junit4.10.jar

Lưu trữ tệp jar đã tải xuống vào một số vị trí trên máy tính của bạn. Chúng tôi đã lưu trữ nó tạiC:/ > JUNIT

Định vị thư mục cài đặt GWT

Hệ điều hành Thư mục cài đặt GWT
các cửa sổ C: \ GWT \ gwt-2.1.0
Linux /usr/local/GWT/gwt-2.1.0
Mac /Library/GWT/gwt-2.1.0

Lớp GWTTestCase

GWT cung cấp GWTTestCaselớp cơ sở cung cấp tích hợp JUnit. Chạy một lớp đã biên dịch mở rộng GWTTestCase trong JUnit khởi chạy trình duyệt HtmlUnit phục vụ để mô phỏng hành vi ứng dụng của bạn trong quá trình thực thi thử nghiệm.

GWTTestCase là một lớp dẫn xuất từ ​​TestCase của JUnit và nó có thể được chạy bằng JUnit TestRunner.

Sử dụng webAppCreator

GWT cung cấp một công cụ dòng lệnh đặc biệt webAppCreator có thể tạo trường hợp thử nghiệm khởi động cho chúng tôi, cộng với mục tiêu kiến ​​và cấu hình khởi chạy nhật thực để thử nghiệm ở cả chế độ phát triển và chế độ sản xuất.

Mở dấu nhắc lệnh và đi tới C:\ > GWT_WORKSPACE > nơi bạn muốn tạo một dự án mới với hỗ trợ thử nghiệm. Chạy lệnh sau

C:\GWT_WORKSPACE>C:\GWT\gwt-2.1.0\webAppCreator 
   -out HelloWorld 
   -junit C:\JUNIT\junit-4.10.jar 
   com.tutorialspoint.HelloWorld

Điểm đáng chú ý

  • Chúng tôi đang thực hiện tiện ích dòng lệnh webAppCreator.
  • HelloWorld là tên của dự án sẽ được tạo
  • -junit option hướng dẫn webAppCreator thêm junit suppport vào dự án
  • com.tutorialspoint.HelloWorld là tên của mô-đun

Xác minh kết quả đầu ra.

Created directory HelloWorld\src
Created directory HelloWorld\war
Created directory HelloWorld\war\WEB-INF
Created directory HelloWorld\war\WEB-INF\lib
Created directory HelloWorld\src\com\tutorialspoint
Created directory HelloWorld\src\com\tutorialspoint\client
Created directory HelloWorld\src\com\tutorialspoint\server
Created directory HelloWorld\src\com\tutorialspoint\shared
Created directory HelloWorld\test\com\tutorialspoint
Created directory HelloWorld\test\com\tutorialspoint\client
Created file HelloWorld\src\com\tutorialspoint\HelloWorld.gwt.xml
Created file HelloWorld\war\HelloWorld.html
Created file HelloWorld\war\HelloWorld.css
Created file HelloWorld\war\WEB-INF\web.xml
Created file HelloWorld\src\com\tutorialspoint\client\HelloWorld.java
Created file 
HelloWorld\src\com\tutorialspoint\client\GreetingService.java
Created file 
HelloWorld\src\com\tutorialspoint\client\GreetingServiceAsync.java
Created file 
HelloWorld\src\com\tutorialspoint\server\GreetingServiceImpl.java
Created file HelloWorld\src\com\tutorialspoint\shared\FieldVerifier.java
Created file HelloWorld\build.xml
Created file HelloWorld\README.txt
Created file HelloWorld\test\com\tutorialspoint\HelloWorldJUnit.gwt.xml
Created file HelloWorld\test\com\tutorialspoint\client\HelloWorldTest.java
Created file HelloWorld\.project
Created file HelloWorld\.classpath
Created file HelloWorld\HelloWorld.launch
Created file HelloWorld\HelloWorldTest-dev.launch
Created file HelloWorld\HelloWorldTest-prod.launch

Hiểu lớp thử nghiệm: HelloWorldTest.java

package com.tutorialspoint.client;

import com.tutorialspoint.shared.FieldVerifier;
import com.google.gwt.core.client.GWT;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;

/**
 * GWT JUnit tests must extend GWTTestCase.
 */
public class HelloWorldTest extends GWTTestCase {

   /**
    * must refer to a valid module that sources this class.
    */
   public String getModuleName() {
      return "com.tutorialspoint.HelloWorldJUnit";
   }

   /**
    * tests the FieldVerifier.
    */
   public void testFieldVerifier() {
      assertFalse(FieldVerifier.isValidName(null));
      assertFalse(FieldVerifier.isValidName(""));
      assertFalse(FieldVerifier.isValidName("a"));
      assertFalse(FieldVerifier.isValidName("ab"));
      assertFalse(FieldVerifier.isValidName("abc"));
      assertTrue(FieldVerifier.isValidName("abcd"));
   }

   /**
    * this test will send a request to the server using the greetServer
    *  method in GreetingService and verify the response.
    */
   public void testGreetingService() {
      /* create the service that we will test. */
      GreetingServiceAsync greetingService = 
      GWT.create(GreetingService.class);
      ServiceDefTarget target = (ServiceDefTarget) greetingService;
      target.setServiceEntryPoint(GWT.getModuleBaseURL() 
      + "helloworld/greet");

      /* since RPC calls are asynchronous, we will need to wait 
       for a response after this test method returns. This line 
       tells the test runner to wait up to 10 seconds 
       before timing out. */
      delayTestFinish(10000);

      /* send a request to the server. */
      greetingService.greetServer("GWT User", 
         new AsyncCallback<String>() {
         public void onFailure(Throwable caught) {
            /* The request resulted in an unexpected error. */
            fail("Request failure: " + caught.getMessage());
         }

         public void onSuccess(String result) {
            /* verify that the response is correct. */
            assertTrue(result.startsWith("Hello, GWT User!"));

            /* now that we have received a response, we need to 
             tell the test runner that the test is complete. 
             You must call finishTest() after an asynchronous test 
             finishes successfully, or the test will time out.*/
            finishTest();
         }
      });
   }
}

Điểm đáng chú ý

Sr.No. Ghi chú
1 Lớp HelloWorldTest được tạo trong gói com.tutorialspoint.client trong thư mục HelloWorld / test.
2 Lớp HelloWorldTest sẽ chứa các trường hợp kiểm thử đơn vị cho HelloWorld.
3 Lớp HelloWorldTest mở rộng lớp GWTTestCase trong gói com.google.gwt.junit.client.
4 Lớp HelloWorldTest có một phương thức trừu tượng (getModuleName) phải trả về tên của mô-đun GWT. Đối với HelloWorld, đây là com.tutorialspoint.HelloWorldJUnit.
5 Lớp HelloWorldTest được tạo với hai trường hợp thử nghiệm mẫu testFieldVerifier, testSimple. Chúng tôi đã thêm testGreetingService.
6 Các phương thức này sử dụng một trong nhiều hàm khẳng định * mà nó kế thừa từ lớp JUnit Assert, là tổ tiên của GWTTestCase.
7 Hàm khẳng định (boolean) khẳng định rằng đối số boolean được truyền vào đánh giá là true. Nếu không, kiểm tra sẽ không thành công khi chạy trong JUnit.

GWT - Ví dụ hoàn chỉnh về tích hợp JUnit

Ví dụ này sẽ hướng dẫn bạn qua các bước đơn giản để hiển thị ví dụ về Tích hợp JUnit trong GWT.

Làm theo các bước sau để cập nhật ứng dụng GWT mà chúng tôi đã tạo ở trên -

Bươc Sự miêu tả
1 Nhập dự án với tên HelloWorld trong eclipse bằng cách sử dụng trình hướng dẫn nhập dự án hiện có (Tệp → Nhập → Chung → Dự án hiện có vào không gian làm việc).
2 Sửa đổi HelloWorld.gwt.xml , HelloWorld.css , HelloWorld.htmlHelloWorld.java như được giải thích bên dưới. Giữ phần còn lại của các tệp không thay đổi.
3 Biên dịch và chạy ứng dụng để xác minh kết quả của logic được triển khai.

Sau đây sẽ là cấu trúc dự án trong eclipse.

Sau đây là nội dung của bộ mô tả mô-đun đã sửa đổi src/com.tutorialspoint/HelloWorld.gwt.xml.

<?xml version = "1.0" encoding = "UTF-8"?>
<module rename-to = 'helloworld'>
   <!-- Inherit the core Web Toolkit stuff.                        -->
   <inherits name = 'com.google.gwt.user.User'/>

   <!-- Inherit the default GWT style sheet.                       -->
   <inherits name = 'com.google.gwt.user.theme.clean.Clean'/>
   <!-- Inherit the UiBinder module.                               -->
   <inherits name = "com.google.gwt.uibinder.UiBinder"/>
   <!-- Specify the app entry point class.                         -->
   <entry-point class = 'com.tutorialspoint.client.HelloWorld'/>
  
   <!-- Specify the paths for translatable code                    -->
   <source path = 'client'/>
   <source path = 'shared'/>

</module>

Sau đây là nội dung của tệp Style Sheet đã sửa đổi war/HelloWorld.css.

body {
   text-align: center;
   font-family: verdana, sans-serif;
}

h1 {
   font-size: 2em;
   font-weight: bold;
   color: #777777;
   margin: 40px 0px 70px;
   text-align: center;
}

Sau đây là nội dung của tệp máy chủ HTML đã sửa đổi war/HelloWorld.html.

<html>
   <head>
      <title>Hello World</title>
      <link rel = "stylesheet" href = "HelloWorld.css"/>
      <script language = "javascript" src = "helloworld/helloworld.nocache.js">
      </script>
   </head>

   <body>
      <h1>JUnit Integration Demonstration</h1>
      <div id = "gwtContainer"></div>
   </body>
</html>

Thay thế nội dung của HelloWorld.java trong src/com.tutorialspoint/client gói với những thứ sau

package com.tutorialspoint.client;

import com.google.gwt.core.client.EntryPoint;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class HelloWorld implements EntryPoint {
	
   public void onModuleLoad() {
      /*create UI */
      final TextBox txtName = new TextBox(); 
      txtName.setWidth("200");
      txtName.addKeyUpHandler(new KeyUpHandler() {
         @Override
         public void onKeyUp(KeyUpEvent event) {
            if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER){
               Window.alert(getGreeting(txtName.getValue()));
            }				
         }
      });
      Label lblName = new Label("Enter your name: ");

      Button buttonMessage = new Button("Click Me!");

      buttonMessage.addClickHandler(new ClickHandler() {			
         @Override
         public void onClick(ClickEvent event) {
            Window.alert(getGreeting(txtName.getValue()));
         }
      });

      HorizontalPanel hPanel = new HorizontalPanel();	
      hPanel.add(lblName);
      hPanel.add(txtName);
      hPanel.setCellWidth(lblName, "130");

      VerticalPanel vPanel = new VerticalPanel();
      vPanel.setSpacing(10);
      vPanel.add(hPanel);
      vPanel.add(buttonMessage);
      vPanel.setCellHorizontalAlignment(buttonMessage, 
      HasHorizontalAlignment.ALIGN_RIGHT);

      DecoratorPanel panel = new DecoratorPanel();
      panel.add(vPanel);

      // Add widgets to the root panel.
      RootPanel.get("gwtContainer").add(panel);
   }  
   
   public String getGreeting(String name){
      return "Hello "+name+"!";
   }
}

Thay thế nội dung của HelloWorldTest.java trong test/com.tutorialspoint/client gói với những thứ sau

package com.tutorialspoint.client;

import com.tutorialspoint.shared.FieldVerifier;
import com.google.gwt.core.client.GWT;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;

/**
 * GWT JUnit tests must extend GWTTestCase.
 */
public class HelloWorldTest extends GWTTestCase {

   /**
    * must refer to a valid module that sources this class.
    */
   public String getModuleName() {
      return "com.tutorialspoint.HelloWorldJUnit";
   }

   /**
    * tests the FieldVerifier.
    */
   public void testFieldVerifier() {
      assertFalse(FieldVerifier.isValidName(null));
      assertFalse(FieldVerifier.isValidName(""));
      assertFalse(FieldVerifier.isValidName("a"));
      assertFalse(FieldVerifier.isValidName("ab"));
      assertFalse(FieldVerifier.isValidName("abc"));
      assertTrue(FieldVerifier.isValidName("abcd"));
   }

   /**
      * this test will send a request to the server using the greetServer
      *  method in GreetingService and verify the response.
   */
   public void testGreetingService() {
      /* create the service that we will test. */
      GreetingServiceAsync greetingService = 
      GWT.create(GreetingService.class);
      ServiceDefTarget target = (ServiceDefTarget) greetingService;
      target.setServiceEntryPoint(GWT.getModuleBaseURL() 
      + "helloworld/greet");

      /* since RPC calls are asynchronous, we will need to wait 
       for a response after this test method returns. This line 
       tells the test runner to wait up to 10 seconds 
       before timing out. */
      delayTestFinish(10000);

      /* send a request to the server. */
      greetingService.greetServer("GWT User", 
         new AsyncCallback<String>() {
         public void onFailure(Throwable caught) {
            /* The request resulted in an unexpected error. */
            fail("Request failure: " + caught.getMessage());
         }

         public void onSuccess(String result) {
            /* verify that the response is correct. */
            assertTrue(result.startsWith("Hello, GWT User!"));

            /* now that we have received a response, we need to 
             tell the test runner that the test is complete. 
             You must call finishTest() after an asynchronous test 
             finishes successfully, or the test will time out.*/
            finishTest();
         }
      });
	
      /**
         * tests the getGreeting method.
      */
      public void testGetGreeting() {
         HelloWorld helloWorld = new HelloWorld();
         String name = "Robert";
         String expectedGreeting = "Hello "+name+"!";
         assertEquals(expectedGreeting,helloWorld.getGreeting(name));
      }
   }
}

Chạy các trường hợp thử nghiệm trong Eclipse bằng cách sử dụng các cấu hình khởi chạy đã tạo

Chúng tôi sẽ chạy các bài kiểm tra đơn vị trong Eclipse bằng cách sử dụng các cấu hình khởi chạy do webAppCreator tạo cho cả chế độ phát triển và chế độ sản xuất.

Chạy thử nghiệm JUnit ở chế độ phát triển

  • Từ thanh menu Eclipse, chọn Run → Run Configurations ...
  • Trong phần JUnit, chọn HelloWorldTest-dev
  • Để lưu các thay đổi đối với Đối số, hãy nhấn Áp dụng
  • Để chạy thử nghiệm, nhấn Run

Nếu mọi thứ đều ổn với ứng dụng của bạn, điều này sẽ tạo ra kết quả sau:

Chạy thử nghiệm JUnit ở chế độ sản xuất

  • Từ thanh menu Eclipse, chọn Run → Run Configurations ...
  • Trong phần JUnit, chọn HelloWorldTest-prod
  • Để lưu các thay đổi đối với Đối số, hãy nhấn Áp dụng
  • Để chạy thử nghiệm, nhấn Run

Nếu mọi thứ đều ổn với ứng dụng của bạn, điều này sẽ tạo ra kết quả sau: