GWT - การรวม JUnit
GWT ให้การสนับสนุนที่ยอดเยี่ยมสำหรับการทดสอบโค้ดฝั่งไคลเอ็นต์อัตโนมัติโดยใช้กรอบการทดสอบ JUnit ในบทความนี้เราจะสาธิตการรวม GWT และ JUNIT
ดาวน์โหลด Junit archive
เว็บไซต์อย่างเป็นทางการของ JUnit - https://www.junit.org
ดาวน์โหลด Junit-4.10.jar
ระบบปฏิบัติการ | ชื่อที่เก็บถาวร |
---|---|
Windows | junit4.10.jar |
ลินุกซ์ | junit4.10.jar |
Mac | junit4.10.jar |
จัดเก็บไฟล์ jar ที่ดาวน์โหลดไว้ในบางตำแหน่งในคอมพิวเตอร์ของคุณ เราเก็บไว้ที่C:/ > JUNIT
ค้นหาโฟลเดอร์การติดตั้ง GWT
ระบบปฏิบัติการ | โฟลเดอร์การติดตั้ง GWT |
---|---|
Windows | C: \ GWT \ gwt-2.1.0 |
ลินุกซ์ | /usr/local/GWT/gwt-2.1.0 |
Mac | /Library/GWT/gwt-2.1.0 |
คลาส GWTTestCase
GWT ให้ GWTTestCaseคลาสพื้นฐานที่ให้การรวม JUnit การรันคลาสที่คอมไพล์ซึ่งขยาย GWTTestCase ภายใต้ JUnit เปิดตัวเบราว์เซอร์ HtmlUnit ซึ่งทำหน้าที่เลียนแบบพฤติกรรมแอปพลิเคชันของคุณในระหว่างการดำเนินการทดสอบ
GWTTestCase เป็นคลาสที่ได้รับมาจาก TestCase ของ JUnit และสามารถเรียกใช้โดยใช้ JUnit TestRunner
ใช้ webAppCreator
GWT มีเครื่องมือบรรทัดคำสั่งพิเศษ webAppCreator ซึ่งสามารถสร้างกรณีทดสอบเริ่มต้นสำหรับเรารวมทั้งเป้าหมายมดและการกำหนดค่าการปล่อยคราสสำหรับการทดสอบทั้งในโหมดการพัฒนาและโหมดการผลิต
เปิดพรอมต์คำสั่งแล้วไปที่ C:\ > GWT_WORKSPACE > ที่คุณต้องการสร้างโปรเจ็กต์ใหม่พร้อมการสนับสนุนการทดสอบรันคำสั่งต่อไปนี้
C:\GWT_WORKSPACE>C:\GWT\gwt-2.1.0\webAppCreator
-out HelloWorld
-junit C:\JUNIT\junit-4.10.jar
com.tutorialspoint.HelloWorld
จุดสำคัญ
- เรากำลังเรียกใช้ยูทิลิตีบรรทัดคำสั่ง webAppCreator
- HelloWorld เป็นชื่อของโครงการที่จะสร้างขึ้น
- อ็อพชัน -junit สั่งให้ webAppCreator เพิ่ม junit suppport ในโปรเจ็กต์
- com.tutorialspoint.HelloWorld คือชื่อของโมดูล
ตรวจสอบผลลัพธ์
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
การทำความเข้าใจคลาสทดสอบ: 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();
}
});
}
}
จุดสำคัญ
ซีเนียร์ | บันทึก |
---|---|
1 | คลาส HelloWorldTest ถูกสร้างขึ้นในแพ็คเกจ com.tutorialspoint.client ภายใต้ไดเร็กทอรี HelloWorld / test |
2 | คลาส HelloWorldTest จะมีกรณีทดสอบหน่วยสำหรับ HelloWorld |
3 | คลาส HelloWorldTest ขยายคลาส GWTTestCase ในแพ็คเกจ com.google.gwt.junit.client |
4 | คลาส HelloWorldTest มีเมธอดนามธรรม (getModuleName) ที่ต้องส่งคืนชื่อของโมดูล GWT สำหรับ HelloWorld นี่คือ com.tutorialspoint.HelloWorldJUnit |
5 | คลาส HelloWorldTest ถูกสร้างขึ้นด้วยกรณีทดสอบตัวอย่างสองกรณี testFieldVerifier, testSimple เราได้เพิ่ม testGreetingService |
6 | วิธีการเหล่านี้ใช้หนึ่งในฟังก์ชัน assert * จำนวนมากที่สืบทอดมาจากคลาส JUnit Assert ซึ่งเป็นบรรพบุรุษของ GWTTestCase |
7 | ฟังก์ชัน assertTrue (บูลีน) ยืนยันว่าอาร์กิวเมนต์บูลีนที่ส่งผ่านในการประเมินเป็นจริง ไม่เช่นนั้นการทดสอบจะล้มเหลวเมื่อรันใน JUnit |
GWT - JUnit Integration Complete Example
ตัวอย่างนี้จะนำคุณผ่านขั้นตอนง่ายๆในการแสดงตัวอย่างของการรวม JUnit ใน GWT
ทำตามขั้นตอนต่อไปนี้เพื่ออัปเดตแอปพลิเคชัน GWT ที่เราสร้างไว้ด้านบน -
ขั้นตอน | คำอธิบาย |
---|---|
1 | นำเข้าโปรเจ็กต์ด้วยชื่อHelloWorldใน eclipse โดยใช้ตัวช่วยสร้างโปรเจ็กต์ที่มีอยู่ (ไฟล์→นำเข้า→ทั่วไป→โปรเจ็กต์ที่มีอยู่ไปยังพื้นที่ทำงาน) |
2 | แก้ไขHelloWorld.gwt.xml , HelloWorld.css , HelloWorld.htmlและHelloWorld.javaตามที่อธิบายด้านล่าง เก็บไฟล์ที่เหลือไว้ไม่เปลี่ยนแปลง |
3 | คอมไพล์และเรียกใช้แอปพลิเคชันเพื่อตรวจสอบผลลัพธ์ของตรรกะที่ใช้งาน |
ต่อไปนี้จะเป็นโครงสร้างโครงการในคราส
ต่อไปนี้เป็นเนื้อหาของตัวอธิบายโมดูลที่แก้ไข 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>
ต่อไปนี้เป็นเนื้อหาของไฟล์ Style Sheet ที่แก้ไข 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;
}
ต่อไปนี้เป็นเนื้อหาของไฟล์โฮสต์ HTML ที่แก้ไข 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>
แทนที่เนื้อหาของ HelloWorld.java ใน src/com.tutorialspoint/client แพคเกจดังต่อไปนี้
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+"!";
}
}
แทนที่เนื้อหาของ HelloWorldTest.java ใน test/com.tutorialspoint/client แพคเกจดังต่อไปนี้
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));
}
}
}
รันกรณีทดสอบใน Eclipse โดยใช้คอนฟิกูเรชันการเรียกใช้ที่สร้างขึ้น
เราจะเรียกใช้การทดสอบหน่วยใน Eclipse โดยใช้การกำหนดค่าการเปิดตัวที่สร้างโดย webAppCreator สำหรับทั้งโหมดการพัฒนาและโหมดการผลิต
เรียกใช้การทดสอบ JUnit ในโหมดการพัฒนา
- จากแถบเมนู Eclipse เลือก Run → Run Configurations ...
- ภายใต้ส่วน JUnit เลือก HelloWorldTest-dev
- ในการบันทึกการเปลี่ยนแปลงอาร์กิวเมนต์ให้กดใช้
- ในการเรียกใช้การทดสอบให้กดเรียกใช้
หากทุกอย่างเรียบร้อยกับแอปพลิเคชันของคุณสิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
รันการทดสอบ JUnit ในโหมดการผลิต
- จากแถบเมนู Eclipse เลือก Run → Run Configurations ...
- ภายใต้ส่วน JUnit เลือก HelloWorldTest-prod
- ในการบันทึกการเปลี่ยนแปลงอาร์กิวเมนต์ให้กดใช้
- ในการเรียกใช้การทดสอบให้กดเรียกใช้
หากทุกอย่างเรียบร้อยกับแอปพลิเคชันของคุณสิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -