Eclipse TestNG .. geht / geht nicht

diggaa1984

Top Contributor
hiho,

also ich krieg hier voll das Fragen .. ich verzweifel grad bei "identischen" settings in 2 projekten .. bei einem geht die TestNG-Suite, bei dem anderen nicht.

Folgende Projektsettings:

funktionierendes Projekt A: dieses Setup lässt sich ohne Probleme ausführen, Tests laufen etc. alles super
src
net
(Sourcefiles)​
test
PacketTest.java​
testng.xml​

Java:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  
<suite name="Foo" verbose="1" >
  <test name="AllIn" >
    <groups>
    	<run>
      		<include name="unittest"/>
    	</run>
  	</groups>
  	<packages>
      	<package name="test" />
   	</packages>
  </test>
</suite>

nicht funktionierendes Projekt B: Beim Ausführen der TestSuite werden einfach 0 Tests durchgeführt, keine Fehler nix, einfach 0 Tests, wie "nicht(s) gefunden". Das ganze ist nun ein Maven-Projekt
src
main
java
** / (Sourcefiles)​
test
java
** / PacketTest.java (gemäß obiger Paketstruktur)​
testng.xml​

Ich habe bereits alle möglichen Pfade im package-Tag der Suite angegeben, es werden einfach keine Tests ausgeführt?! An der Testdatei (PacketTest.java) hat sich nichts verändert (mit Ausnahme der package-Anweisung). Worin zum Henker liegt der Fehler?
 

kama

Top Contributor
Hi,

Sind denn die Gruppen bei der Annotierung @Test(groups = { "...." }) angegeben?
Wie sieht die Pom des nicht funktionierenden Projektes aus? Konfiguration maven-surefire-plugin? Gibts Du dort das testng.xml file an?

Weiterhin wenn das nicht funktionierende Projekt ein Maven Projekt ist, dann ist die Struktur aber:
Code:
  +-- pom.xml
  +-- src
          +-- main
                 +--- java
                            +---- xyz / abc / XYZ.java
          +-- test
                 +--- java
                            +---- xyz / abc / XYZTest.java

Sind das Unit Tests oder sind das Integrationstests ?

Gruß
Karl Heinz Marbaise
 

diggaa1984

Top Contributor
also die Testdatei sieht wie folgt aus:
Java:
package net.foo.network.packet;

import net.foo.network.packet.DefaultPacket;
import net.foo.network.packet.Packet;
import net.foo.network.packet.PacketFactory;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;


/**
 * This class tests the integrity of packet data types regarding mandatory and missing packet data.
 * Numeric data is expected to be ordered big-endian.
 * @author Marcus Wuensche
 * 13.06.2011
 */
public class PacketTest {
	
	/**
	 * Creates different packet data for packets (using Big-Endian).
	 * The following settings are made:
	 * <ul>
     * <li>flag(0) + type(10) = 2 byte
     * <li>flag(0) + type(40) + length(4) + data(4 byte) = 8 byte
     * </ul>
	 * @return Array of array of testdata.
	 */
	@DataProvider(name="validPacketData") 
	public Object[][] createValidPacketData() {
		return new Object[][] {
				{ new byte[]{8}},
				{ new byte[]{2,10,-1,-1}},
				{ new byte[]{7,0,1,64,0,1,65}},
				{ new byte[]{4,-1,-1,-1,-1,0,5,64,65,66,67,68}}
		};
	}//createPacketData
	
	
	/**
	 * Creates different invalid packet data for packets (using Big-Endian).
	 * The following settings are made:
	 * <ul>
     * <li>no information = 0 byte
     * <li>flag(0) + type(20) + broken length field = 3 byte (missing 1 length-byte)
     * <li>flag(0) + type(40) + length(4) + broken data field = 11 byte (missing 1 data-byte)
     * </ul>
	 * @return Array of array of testdata.
	 */
	@DataProvider(name="invalidPacketData") 
	public Object[][] createInvalidPacketData() {
		return new Object[][] {
				{ new byte[0]},
				{ new byte[]{2,0}},
				{ new byte[]{4,0,4,1,2,3}}
		};
	}//createPacketData
	
	
	/**
	 * Creates a packet ({@link DefaultPacket}) from valid <tt>data</tt>.
	 * This method is also testing the integrity of the new package by asserting the following information:
	 * <ul>
     * <li>packet.flags == data.flags
     * <li>packet.type == data.type
     * <li>packet.asBytes == data
     * </ul> 
	 * @param data Valid packet data.
	 */
	@Test(groups={"unittest"}, 
		  dataProvider="validPacketData")
	public void createValidDefaultPacketFromData(byte[] data) {
		Packet packet = PacketFactory.convertDataToPacket(data);
		
		Assert.assertEquals(packet.getFlags(), (int) data[0]>>5);
		Assert.assertEquals(packet.getType(), ((int) data[0]) & 0x1F);
		Assert.assertEquals(packet.asBytes(), data);
	}//createValidDefaultPacketFromData
	
	
	/**
	 * Creates a packet ({@link DefaultPacket}) from invalid <tt>data</tt>.
	 * This method expects an <tt>IllegalArgumentException</tt> due to missing or broken information.
	 * @param data Invalid or broken packet information
	 */
	@Test(groups={"unittest"}, 
		  dataProvider="invalidPacketData",
		  expectedExceptions=IllegalArgumentException.class)
	public void createInvalidDefaultPacketFromData(byte[] data) {
		PacketFactory.convertDataToPacket(data);
	}//createInvalidDefaultPacketFromData
}//PacketTests

Als Sourcedatein, die beim Test eine Rolle spielen gibt es folgende:
Package: net.foo.network.packet
Datein: Packet.java (Interface), PacketFactory.java, AbstractPacket.java, APacket.java, BPacket.java, etc.

A und B stellen dabei jeweilige Implementierungen eines Paketes dar. Die namen wurden mal vereinfacht ^^

was genau willst du mir mit dem hinweis zum aufbau des maven-projektes sagen? Meine Struktur ist doch identisch?!
 

diggaa1984

Top Contributor
bezüglich der pom.xml, die sieht so aus:
Java:
<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>net.foo.core</groupId>
  <artifactId>javaadapter</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>
  		<groupId>org.testng</groupId>
  		<artifactId>testng</artifactId>
 		<version>6.0.1</version>
 		<scope>test</scope>
	</dependency>
  </dependencies>
  <build>
  	<plugins>		
	  <plugin>
	    <groupId>org.apache.maven.plugins</groupId>
	    <artifactId>maven-surefire-plugin</artifactId>
	    <version>2.9</version>
	    <configuration>
	      <suiteXmlFiles>
	        <suiteXmlFile>src\test\testng.xml</suiteXmlFile>
	      </suiteXmlFiles>
	    </configuration>
	  </plugin>
	</plugins>
  </build>
</project>

allerdings spielt das noch keine Rolle, denn da das bisher ja auch nicht ging, wollte ich erstmal direkt die testng.xml per "Run As -> TestNG Suite" anwerfen, was ja eben auch nicht funktioniert, und da wunderts mich natürlich nich, dass das surefire--plugin auch nichts findet ^^
 

diggaa1984

Top Contributor
also mir erschliesst sich das rätsel nicht ganz .. ich habe nix am classpath geändert und auf einmal, nachdem ich erst direkt mit der Klassenangabe gearbeitet habe und dann merkte es ging .. geswitcht auf package-tag und auf einmal geht das auch!?

Java:
<package name="net.lypster.network.packet.*" />

ich bin mir sicher auch diese variante mit dem Stern und sämtlichen Pfaden vorweg schon gestern getestet zu haben ... ;(

ok nun gehts erstmal, auch über die pom mit dem surefireplugin.
 

kama

Top Contributor
Hi,

mit dem Verzeichnis da habe ich wohl Tomaten auf den Augen gehabt..


Aber probier mal zuerst, dass testng.xml file zu vereinfachen: Nimm nur mal das Package...

Code:
<suite name="Foo" verbose="1" >
  <test name="AllIn" >
    <packages>
        <package name="net.foo.network.*" />
    </packages>
  </test>
Weiterhin würde mich die Konfiguration in der POM.xml interessieren wie das aussieht...

Gruß
Karl Heinz Marbaise
 

Ähnliche Java Themen

Neue Themen


Oben