Seitenhistorie
...
Die Metainformationen werden jedoch bei Nuclos konfiguriert (und liegen daher nicht in Code-Form vor). Daher war es an dieser Stellen notwendig, speziell für Nuclos Unit Tests einen speziellen MetaProvider (org.nuclos.server.common.TestMetaProvider
) zur Verfügung zu stellen. Dieser TestMetaProvider
liest die Metainformationen in Form einer XML Datei, von einem Nuclos Server zur Runtime mittels JMX Operation (MetaProvider#dumpAllEntities(boolean)
) erzeugt wurde. Durch diesen Trick stehen 'richtige' Metainformationen einer Nuclos Server Instanz auch für Unit Tests zur Verfügung.
TODO: Zeigen, wie man die XML Datei, mittels JMX dumped.
Ein Beispiel mit TestNG und Mockito
Im folgenden ein Überblick, wie man Unit Test in einer Extension mittels TestNG und Mockito aufsetzt.
Anpassung in pom.xml der Extension
Da Testabhängigkeiten in maven nicht so wie normale Abhängigkeiten vererbt werden, muss im pom.xml in jedem (Maven) Modul, welches Unit Tests verwenden möchte, folgendes bei den Abhängigkeiten ergänzt werden:
Codeblock | ||||
---|---|---|---|---|
| ||||
<?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/xsd/maven-4.0.0.xsd">
[...]
<dependencies>
[...]
<!-- testing -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.kubek2k</groupId>
<artifactId>springockito</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.kubek2k</groupId>
<artifactId>springockito-annotations</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
[...]
</project> |
Erstellung von testng.xml
Für TestNG Unit Tests ist die Datei testng.xml verpflichtend. In ihr wir definiert, welche Tests während des CI Build standardmäßig ausgeführt werden. Um alle Tests auszuführen und Log4j für die Test zu konfigurien, kann die Datei wie folgt aussehen:
Codeblock | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false">
<listeners>
<listener class-name="de.bmw.fdm.testng.LoggingListener" />
</listeners>
<test name="Test">
<packages>
<package name=".*" />
</packages>
</test>
<!-- Test -->
</suite>
<!-- Suite --> |
(Optional) Log4j für Unit Tests konfigurien
Unit Test in TestNG