NetBeans, Maven 2 i TestNG

Dziś w południe dostałem takiego oto maila:

“Witam,

Znalazlem mail do Pana na JDN. Od wczoraj walcze z proba polaczenia
TestNG oraz Mavena2 pod Netbeans. Mimo iż w lokalnym repozytorium mam
pakiet TestNG i w przeglądarce projektow w TestLibraries widnieje wpis
testing-4.7-jdk15 to jednak gdy probuje napisac jakikolwiek test to
nie mam dostepu do zadnego klas/adnotacji z biblioteki TestNG - jakby
jej nie bylo na classpath.

Dodam jeszcze ze w przegladarce projektow ikona biblioteki TestNG w
gorjen czesci jest brazowa, podczas gdy ikony innych - szare.

Ponizej zamieszczam fragmenty mojego pliku pom.xml”

Poniżej fragment pliku pom.xml i imię autora maila.

W przerwie między dewelopmentem który przydarzył mi się w te święta, postanowiłem odpowiedzieć na tego maila… na blogu :D

A więc opiszę po krótko jak skonfigurować prosty projekt w NetBeans 6.1 Beta , do projektu wygeneruję plik pom.xml oraz dodam prościutki test TestNG.

Krok 1 - utworzenie projektu

Utwórzmy najpierw projekt z użyciem NetBeans 6.1 Beta oraz skonfigurujmy go jako projekt Maven 2. W tym celu wybieramy z menu opcję File -> New Project , następnie pojawi nam się takie oto okienko:

Rysunek 1

Wybieramy w nim opcję Maven -> Maven Project i klikamy Next.

Następny ekran to wybranie archetypu, wybieramy Maven Quickstart Archetype i klikamy Next:

Rysunek 2

Teraz czas na nadanie groupId i artifactId naszemu projektowi, ja zrobiłem to tak jak widzicie na poniższym obrazku:

Rysunek 3

Teraz kliamy Finish i proszę, oto nasz projekt:

Rysunek 4

Składa się on z przykładowego pliku aplikacji (App.java) oraz przykładowego testu (AppTest.java).

Krok 2 - modyfikacja projektu

Ponieważ w tym wpisie interesuje nas TestNG a przykładowy test jest napisany dla JUnit to możemy go usunąć - napiszemy swój od podstaw :D
Zmodyfikujmy nasz plik pom.xml na następujący (ten plik dotyczy mojego projektu, jeśli nadaliście inne groupId i artifactId to musicie go zmienić analogicznie):

<?xml version=“1.0″ encoding=“UTF-8″?>
<project xmlns=“http://maven.apache.org/POM/4.0.0″
  xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
  xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd”>

  <modelVersion>4.0.0</modelVersion>
  <groupId>org.holewa</groupId>
  <artifactId>test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>test</name>
  <url>http://www.holewa.org</url>
  <dependencies>
    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>5.6</version>
      <scope>test</scope>
      <classifier>jdk15</classifier>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
          </suiteXmlFiles>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Teraz zmieńmy ustawienia naszego projektu tak aby ustawić dla niego wersję Java zgodną z wersja 1.5, w tym celu wybierzmy z menu kontekstowego naszego projektu opcję Properties, następnie z listy w okienku po lewej stronie opcję Sources i na dole ekranu który nam się ukaże Source/Binary Format ustawmy na 1.5. Możecie to zobaczyć na poniższym obrazku:

Rysunek 4b

NetBeans zmodyfikuje nasz plik pom.xml, dodając do niego taki fragment kodu:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>RELEASE</version>
  <configuration>
    <source>1.5</source>
    <target>1.5</target>
  </configuration>
</plugin>

Dobra, teraz wybierzmy z menu kontekstowego projektu opcję Clean and Build, projekt nam się przebuduje a TestNG dodane jako zależność do naszego pom`a pobierze się z repozytorium Maven 2.

Krok 3 - pisanie testu

Nadszedł czas na nasz test :D W tym celu tworzymy nowy plik xml o nazwie testng.xml, musi się on znajdować w tym katalogu w którym znajduje się nasz pom.xml, jego zawartość będzie następująca:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name=“Simple test siute”>
  <test name=“Simple test”>
    <classes>
      <class name=“org.holewa.test.SimpleTest”/>
    </classes>
  </test>
</suite>

Podaliśmy w nim, że nasz projekt zawiera jeden test org.holewa.test.SimpleTest w takim razie czas na jego napisanie :)
Dodajmy nową klasę do projektu, klikamy prawym przyciskiem myszy na gałąź Test Packages w strukturze projektu, następnie wybieramy opcję New -> Java Class… i dodajemy klasę org.holewa.test.SimpleTest.

Kod znajdujący się w niej powinien mieć następującą postać:

package org.holewa.test;

import org.testng.annotations.*;

public class SimpleTest {

  @Test
  public void simpleTest() {
    System.out.println(“My simple test.”);
  }
}

Zapiszmy plik. Wybierzmy z menu kontekstowego projektu opcję Clean and Build, w logach które pojawią się na dole w okienku zobaczymy podobną treść:

——————————————————-
T E S T S
——————————————————-
Running TestSuite
[Parser] Running:
C:\Documents and Settings\raho\My Documents\NetBeansProjects\test\testng.xml
My simple test.

To znak, że nasz test się wykonał, gdy zmienimy kod metody testowej na:

@Test
public void simpleTest() {
  System.out.println(“My simple test.”);
  assert false;
}

Dostaniemy podobny komunikat do tego:

——————————————————-
T E S T S
——————————————————-
Running TestSuite
[Parser] Running:
C:\Documents and Settings\raho\My Documents\NetBeansProjects\test\testng.xml
My simple test.
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.297 sec <<< FAILURE!
Results :
Failed tests:
simpleTest(org.holewa.test.SimpleTest)
------------------------------------------------------------------------
[ERROR]BUILD FAILURE
------------------------------------------------------------------------
There are test failures.

Gdy wybierzemy teraz z menu kontekstowego projektu opcję Test ukarze nam się wynik w okienku testów JUnit:

Rysunek 6

Niestety NetBeans nie posiada wtyczki do obsługi testów TestNG, stąd też pojawiające się okienko JUnit ;(

Ponieważ w mailu który był na samym początku padło stwierdzenie “Dodam jeszcze ze w przegladarce projektow ikona biblioteki TestNG w gorjen czesci jest brazowa, podczas gdy ikony innych - szare”, chciałem wytłumaczyć opisaną w nim sytuację.

Zobaczmy na widoku projektu:

Rysunek 5

A dokładnie bibliotek które się znajdują w zależnościach. Biblioteki zaznaczone kolorowo to bezpośrednie zależności w naszym pom.xml, biblioteki zaznaczone na szaro to biblioteki które są zależnościami do naszych zależności, stąd też inne ich oznaczenie, gdyż nie wprowadzaliśmy ich do projektu bezpośrednio - wprowadził je twórca dodanej przez nas biblioteki ustawiając je jako zależność bez której jego biblioteka nie może funkcjonować. Gdy chcemy ustawić tą bibliotekę tak aby nie była dodana do naszego projektu możemy to zrobić w bardzo łatwy sposób, wystarczy wybrać w menu kontekstowym biblioteki opcję Exclude Dependency a nasz pom.xml zostanie automatycznie zmodyfikowany. Prawda, że łatwe? :D

  • Digg
  • del.icio.us
  • Google
  • description
  • Technorati
  • Wykop
March 22, 2008 | |

COMMENTS

 

Trackback URI | Comments RSS

2 Responses to “NetBeans, Maven 2 i TestNG”

  1. Lukasz on March 24th, 2008 11:04 pm

    Kilka dni temu zainstalowałem NB 6.1 Beta, jednak nie ma w nim wsparcia dla Mavena, jakiego plugina używasz?

    Pozdrawiam

  2. radoslaw.holewa on March 29th, 2008 11:21 pm

    O ile dobrze pamiętam to nie instalowałem tej wtyczki gdyż już była dodana - nazywa się ona “Maven” :)

    Pozdrawiam,
    Radek

Leave a Reply