GWT - JUnit Entegrasyonu
GWT, JUnit test çerçevesini kullanarak istemci tarafı kodunun otomatik olarak test edilmesi için yürütme desteği sağlar. Bu yazıda GWT ve JUNIT entegrasyonunu göstereceğiz.
Junit arşivini indir
JUnit Resmi Sitesi - https://www.junit.org
İndir Junit-4.10.jar
işletim sistemi | Arşiv adı |
---|---|
pencereler | junit4.10.jar |
Linux | junit4.10.jar |
Mac | junit4.10.jar |
İndirilen jar dosyasını bilgisayarınızdaki bir yerde saklayın. Onu şurada sakladıkC:/ > JUNIT
GWT kurulum klasörünü bulun
işletim sistemi | GWT kurulum klasörü |
---|---|
pencereler | C: \ GWT \ gwt-2.1.0 |
Linux | /usr/local/GWT/gwt-2.1.0 |
Mac | /Library/GWT/gwt-2.1.0 |
GWTTestCase Sınıfı
GWT sağlar GWTTestCaseJUnit entegrasyonu sağlayan temel sınıf. JUnit altında GWTTestCase'i genişleten derlenmiş bir sınıf çalıştırmak, test yürütme sırasında uygulama davranışınızı taklit etmeye yarayan HtmlUnit tarayıcısını başlatır.
GWTTestCase, JUnit TestCase'den türetilmiş bir sınıftır ve JUnit TestRunner kullanılarak çalıştırılabilir.
WebAppCreator'ı kullanma
GWT, özel bir komut satırı aracı sağlar webAppCreator bizim için bir başlangıç test senaryosu, artı karınca hedefleri ve hem geliştirme modunda hem de üretim modunda test etmek için tutulma başlatma yapılandırmaları oluşturabilir.
Komut istemini açın ve şuraya gidin: C:\ > GWT_WORKSPACE > test desteği ile yeni bir proje oluşturmak istediğiniz yerde aşağıdaki komutu çalıştırın.
C:\GWT_WORKSPACE>C:\GWT\gwt-2.1.0\webAppCreator
-out HelloWorld
-junit C:\JUNIT\junit-4.10.jar
com.tutorialspoint.HelloWorld
Önemli Noktalar
- WebAppCreator komut satırı yardımcı programını çalıştırıyoruz.
- HelloWorld, oluşturulacak projenin adıdır
- -junit seçeneği webAppCreator'a projeye junit desteği eklemesini söyler
- com.tutorialspoint.HelloWorld modülün adıdır
Çıkışı doğrulayın.
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
Test sınıfını anlama: 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();
}
});
}
}
Önemli Noktalar
Sr.No. | Not |
---|---|
1 | HelloWorldTest sınıfı, HelloWorld / test dizini altındaki com.tutorialspoint.client paketinde oluşturuldu. |
2 | HelloWorldTest sınıfı, HelloWorld için birim test durumları içerir. |
3 | HelloWorldTest sınıfı, com.google.gwt.junit.client paketindeki GWTTestCase sınıfını genişletir. |
4 | HelloWorldTest sınıfı, GWT modülünün adını döndürmesi gereken soyut bir yönteme (getModuleName) sahiptir. HelloWorld için bu com.tutorialspoint.HelloWorldJUnit. |
5 | HelloWorldTest sınıfı, iki örnek test olayı testFieldVerifier, testSimple ile oluşturulur. TestGreetingService'i ekledik. |
6 | Bu yöntemler, GWTTestCase'in atası olan JUnit Assert sınıfından miras aldığı birçok assert * işlevinden birini kullanır. |
7 | AssertTrue (boolean) işlevi, iletilen boole bağımsız değişkeninin doğru olarak değerlendirildiğini iddia eder. Aksi takdirde, test JUnit'te çalıştırıldığında başarısız olur. |
GWT - JUnit Entegrasyonu Tamamlandı Örneği
Bu örnek, GWT'de JUnit Entegrasyonu örneğini göstermek için sizi basit adımlardan geçirecektir.
Yukarıda oluşturduğumuz GWT uygulamasını güncellemek için aşağıdaki adımları izleyin -
Adım | Açıklama |
---|---|
1 | Mevcut proje sihirbazını (Dosya → İçe Aktar → Genel → Mevcut Projeleri çalışma alanına) kullanarak tutulmada HelloWorld adıyla projeyi içe aktarın. |
2 | Değiştir HelloWorld.gwt.xml , HelloWorld.css , HelloWorld.html ve HelloWorld.java olarak aşağıda açıklanmıştır. Geri kalan dosyaları değiştirmeden tutun. |
3 | Uygulanan mantığın sonucunu doğrulamak için uygulamayı derleyin ve çalıştırın. |
Tutulmadaki proje yapısı aşağıdadır.
Değiştirilmiş modül tanımlayıcısının içeriği aşağıdadır 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>
Değiştirilen Stil Sayfası dosyasının içeriği aşağıdadır 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;
}
Aşağıda, değiştirilmiş HTML ana bilgisayar dosyasının içeriği verilmiştir 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>
İçindeki HelloWorld.java içeriğini değiştirin src/com.tutorialspoint/client aşağıdaki ile paket
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'nın içeriğini şurada değiştirin: test/com.tutorialspoint/client aşağıdaki ile paket
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));
}
}
}
Oluşturulan başlatma yapılandırmalarını kullanarak Eclipse'de test senaryoları çalıştırın
Hem geliştirme modu hem de üretim modu için webAppCreator tarafından oluşturulan başlatma yapılandırmalarını kullanarak Eclipse'de birim testleri çalıştıracağız.
JUnit testini geliştirme modunda çalıştırın
- Eclipse menü çubuğundan Çalıştır → Yapılandırmaları Çalıştır ... öğesini seçin.
- JUnit bölümü altında HelloWorldTest-dev'i seçin
- Değişkenlerdeki değişiklikleri kaydetmek için Uygula'ya basın
- Testi çalıştırmak için Çalıştır'a basın
Başvurunuzla ilgili her şey yolundaysa, bu aşağıdaki sonucu verecektir -
JUnit testini üretim modunda çalıştırın
- Eclipse menü çubuğundan Çalıştır → Yapılandırmaları Çalıştır ... öğesini seçin.
- JUnit bölümü altında HelloWorldTest-prod'u seçin
- Değişkenlerdeki değişiklikleri kaydetmek için Uygula'ya basın
- Testi çalıştırmak için Çalıştır'a basın
Başvurunuzla ilgili her şey yolundaysa, bu aşağıdaki sonucu verecektir -