[JAVA] Comment exécuter une tâche djUnit dans Ant

Voici comment exécuter une tâche djUnit dans Ant. Eclipse est nouveau et vous ne pouvez plus utiliser djUnit, mais je pense que ce sera utile si vous souhaitez continuer à utiliser les tests djUnit dans votre projet.

Environnement d'exploitation

Ant 1.9.7 jp.co.dgic.eclipse.jdt.djunit_3.5.x_0.8.6.zip jUnit4 Eclipse Release 4.7.0 (Oxygen)

Structure du projet

Créez deux classes de test et deux classes de test, et copiez les fichiers JAR requis de Ant, djUnit et jUnit dans le dossier test / lib.

Original jar Remarques
Ant ant-junit4.jar
djUnit asm-3.1.jar asm-1.5.3.jar、asm-2.2.1.Aucun pot requis
asm-attrs-1.5.3.jar
djunit.jar
jakarta-oro-2.0.7.jar
jcoverage-djunit-1.0.5.jar
jUnit junit.jar
hamcrest-core-1.3.jar

Screenshot from 2019-08-25 18-43-41.png

Classe testée

HelloService.java


package com.example;

public class HelloService {

	private String name;
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return this.name;
	}
	
	public String getMessage() {
		return String.format("Hello %s!", this.getName());
	}
	
	public void sayHello() {
		System.out.println(this.getMessage());
	}
}

CalculateService.java


package com.example;

public class CalculateService {

	public enum Operation {
		ADD,
		SUBTRACT,
		MULTIPLY,
		DIVIDE
	};

	private int v1;
	private int v2;
	private Operation op;
	
	public void setValue1(int value) {
		this.v1 = value;
	}
	
	public void setValue2(int value) {
		this.v2 = value;
	}
	
	public void setOperation(Operation op) {
		this.op = op;
	}
	
	public float getResult() {
		switch (this.op) {
		case ADD:
			return this.v1 + this.v2;
		case SUBTRACT:
			return this.v1 - this.v2;
		case MULTIPLY:
			return this.v1 * this.v2;
		case DIVIDE:
			if (this.v2 == 0) throw new IllegalArgumentException("value2 must not be zero.");
			return (float)this.v1 / this.v2;
		}
		throw new IllegalArgumentException("operation isn't specified.");
	}
	
	public void calculate() {
		String opString = "?";
		switch (this.op) {
		case ADD:
			opString = "+";
			break;
		case SUBTRACT:
			opString = "-";
			break;
		case MULTIPLY:
			opString = "*";
			break;
		case DIVIDE:
			opString = "/";
			break;
		}
		System.out.println(String.format("%d %s %d = %.3f", this.v1, opString, this.v2, this.getResult()));
	}
}

Classe d'essai

HelloServiceTest.java


package com.example;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import org.junit.Before;
import org.junit.Test;

import jp.co.dgic.testing.common.virtualmock.MockObjectManager;

public class HelloServiceTest {

	@Before
	public void init() {
		MockObjectManager.initialize();
	}
	
	@Test
	public void test001() {
		HelloService service = new HelloService();
		service.setName("Japan");
		assertThat(service.getMessage(), is("Hello Japan!"));
		
		MockObjectManager.setReturnValueAtAllTimes(HelloService.class, "getName", "World");
		assertThat(service.getMessage(), is("Hello World!"));
		
		service.sayHello();
		MockObjectManager.assertCalled(HelloService.class, "sayHello");
	}
}

CalculateServiceTest.java


package com.example;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import org.junit.Before;
import org.junit.Test;

import com.example.CalculateService.Operation;

import jp.co.dgic.testing.common.virtualmock.MockObjectManager;

public class CalculateServiceTest {

	@Before
	public void init() {
		MockObjectManager.initialize();
	}
	
	@Test
	public void test001() {
		CalculateService service = new CalculateService();
		service.setValue1(100);
		service.setValue2(50);
		service.setOperation(Operation.ADD);
		service.calculate();
		assertThat(service.getResult(), is(150f));
		MockObjectManager.assertCalled(CalculateService.class, "calculate");
		
		MockObjectManager.setReturnValueAtAllTimes(CalculateService.class, "getResult", 777f);
		service.calculate();
		assertThat(service.getResult(), is(777f));
	}
}

build.xml build.xml crée le prototype avec la fonction d'exportation d'Eclipse et ajoute la tâche de djUnit. La tâche djunit "usenoverify =" true "" est requise lors de l'exécution sous Java 8.

build.xml


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="coverage.report" name="testproject">
    <taskdef classpath="./test/lib/djunit.jar" resource="djunittasks.properties"/>
    
    <property environment="env"/>
    <property name="ECLIPSE_HOME" value="../../eclipse/eclipse/"/>
    <property name="src.main" value="./src/main/java"/>
    <property name="test.src.main" value="./test/src/main/java"/>
    <property name="junit.output.dir" value="junit"/>
    <property name="debuglevel" value="source,lines,vars"/>
    <property name="target" value="1.8"/>
    <property name="source" value="1.8"/>
    <path id="testproject.classpath">
        <pathelement location="bin"/>
        <pathelement location="test/lib/ant-junit4.jar"/>
        <pathelement location="test/lib/asm-3.1.jar"/>
        <pathelement location="test/lib/asm-attrs-1.5.3.jar"/>
        <pathelement location="test/lib/jakarta-oro-2.0.7.jar"/>
        <pathelement location="test/lib/jcoverage-djunit-1.0.5.jar"/>
        <pathelement location="test/lib/djunit.jar"/>
        <pathelement location="test/lib/junit.jar"/>
        <pathelement location="test/lib/hamcrest-core-1.3.jar"/>
    </path>
    <target name="init">
        <mkdir dir="bin"/>
        <copy includeemptydirs="false" todir="bin">
            <fileset dir="src/main/java">
                <exclude name="**/*.launch"/>
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
        <copy includeemptydirs="false" todir="bin">
            <fileset dir="test/src/main/java">
                <exclude name="**/*.launch"/>
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>
    <target name="clean">
        <delete dir="bin"/>
    </target>
    <target depends="clean" name="cleanall"/>
    <target depends="build-subprojects,build-project" name="build"/>
    <target name="build-subprojects"/>
    <target depends="init" name="build-project">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
            <src path="src/main/java"/>
            <src path="test/src/main/java"/>
            <classpath refid="testproject.classpath"/>
        </javac>
    </target>
    <target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
    <target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler">
        <copy todir="${ant.library.dir}">
            <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
        </copy>
        <unzip dest="${ant.library.dir}">
            <patternset includes="jdtCompilerAdapter.jar"/>
            <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
        </unzip>
    </target>
    <target description="compile project with Eclipse compiler" name="build-eclipse-compiler">
        <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
        <antcall target="build"/>
    </target>
    <target name="HelloServiceTest" depends="build">
        <mkdir dir="${junit.output.dir}"/>
        <djunit printsummary="withOutAndErr" targetsrcdir="${src.main};${test.src.main}" virtualmock="yes" coverage="no" usenoverify="true">
            <formatter type="xml"/>
            <test name="com.example.HelloServiceTest" todir="${junit.output.dir}"/>
            <jvmarg line="-ea"/>
            <classpath refid="testproject.classpath"/>
        </djunit>
    </target>
    <target name="CalculateServiceTest" depends="build">
        <mkdir dir="${junit.output.dir}"/>
        <djunit printsummary="withOutAndErr" targetsrcdir="${src.main};${test.src.main}" virtualmock="yes" coverage="no" usenoverify="true">
            <formatter type="xml"/>
            <test name="com.example.CalculateServiceTest" todir="${junit.output.dir}"/>
            <jvmarg line="-ea"/>
            <classpath refid="testproject.classpath"/>
        </djunit>
    </target>
    <target name="TestAll" depends="build">
        <mkdir dir="${junit.output.dir}"/>
        <djunit printsummary="withOutAndErr" targetsrcdir="${src.main};${test.src.main}" virtualmock="yes" coverage="yes" usenoverify="true">
            <formatter type="xml"/>
            <jvmarg line="-ea"/>
            <classpath refid="testproject.classpath"/>
            <batchtest todir="${junit.output.dir}">
                <fileset dir="./bin">
                    <include name="**/*Test.class"/>
                </fileset>
            </batchtest>
        </djunit>
    </target>
    <target name="coverage.report" depends="TestAll">
        <djunit-coverage-report serFile="./jcoverage.ser" srcdir="${src.main}" destdir="${junit.output.dir}">
            <classpath refid="testproject.classpath"/>
        </djunit-coverage-report>
    </target>
</project>

Courir

Il peut être exécuté à partir d'Eclipse ou de la ligne de commande. Cependant, utilisez le même Ant que la version de ant-junit4.jar que vous avez copiée dans test / lib. Le résultat de l'exécution à partir de la ligne de commande est indiqué ci-dessous. Screenshot from 2019-08-25 22-07-04.png

Rapport de couverture

Un rapport de couverture est également créé, mais c'est étrange ... Screenshot from 2019-08-25 22-14-25.png Screenshot from 2019-08-25 22-15-21.png

Résumé

J'ai écrit cet article car il n'y a pas beaucoup d'informations sur djUnit car il est ancien. Je pense qu'il y a certains points qui doivent être corrigés, donc si vous remarquez quelque chose, j'apprécierais que vous puissiez le signaler.

Postscript 27/08/2019

Comment effectuer le débogage à distance dans Eclipse. Créez le jvmarg de la tâche djunit dans build.xml comme suit: Vous n'êtes pas obligé d'avoir -ea.

build.xml


<jvmarg line="-ea -agentlib:jdwp=transport=dt_socket,suspend=y,server=y,address=8000"/>

Une fois exécuté, il s'arrêtera au milieu comme indiqué ci-dessous. Screenshot from 2019-08-27 22-21-44.png Ensuite, sélectionnez testproject d'Eclipse, sélectionnez [Clic droit] → [Débogage] → [Configuration de débogage] → [Application Java distante], entrez comme indiqué sur la figure et appuyez sur le bouton de débogage. Vous pouvez maintenant déboguer. N'oubliez pas de définir le point d'arrêt. Screenshot from 2019-08-27 22-22-24.png

Recommended Posts

Comment exécuter une tâche djUnit dans Ant
Comment exécuter Ant dans Gradle
Comment insérer une vidéo dans Rails
Comment publier une bibliothèque dans jCenter
Rails: comment bien écrire une tâche de râteau
Comment afficher une page Web en Java
Comment ajouter un chemin de classe dans Spring Boot
Comment créer un thème dans Liferay 7 / DXP
Comment implémenter une fonctionnalité similaire dans Rails
Comment créer facilement un pull-down avec des rails
Comment générer automatiquement un constructeur dans Eclipse
Comment créer un environnement Java en seulement 3 secondes
Comment exécuter l'application SpringBoot en tant que service
Comment implémenter une fonctionnalité intéressante dans Ajax avec Rails
Comment créer un projet Spring Boot dans IntelliJ
Comment créer un URI de données (base64) en Java
Comment lancer une autre commande dans un programme Ruby
Comment afficher un aperçu du navigateur avec VS Code
[Comment insérer une vidéo dans un hameau avec Rails]
Comment écrire une recherche de comparaison de dates dans Rails
Comment se moquer d'un appel de super méthode dans PowerMock
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment convertir un fichier en tableau d'octets en Java
[Rails 6] Comment définir une image d'arrière-plan dans Rails [CSS]
[Rails] Comment charger JavaScript dans une vue spécifique
Comment écrire un mod de base dans Minecraft Forge 1.15.2
Comment laisser un commentaire
Comment insérer une vidéo
Comment créer une méthode
Comment changer une chaîne dans un tableau en un nombre dans Ruby
Comment créer une partie d'espace réservé à utiliser dans la clause IN
Comment stocker des chaînes de ArrayList à String en Java (personnel)
Comment sélectionner une date spécifiée par code dans le calendrier FS
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Comment ajouter les mêmes index dans un tableau imbriqué
Mappage à une classe avec un objet de valeur dans How to My Batis
Comment développer et enregistrer une application Sota en Java
Comment simuler le téléchargement de formulaires post-objet vers OSS en Java
Comment créer un portlet de générateur de services dans Liferay 7 / DXP
Comment configurer un proxy avec authentification dans Feign
Comment utiliser Lombok au printemps
Comment trouver May'n dans XPath
Comment masquer la barre de défilement dans WebView
Comment itérer indéfiniment en Ruby
Comment créer un conteneur Java
Comment maîtriser la programmation en 3 mois
Comment signer Minecraft MOD
Comment créer un pilote JDBC
Pour exécuter JavaFX sur Docker
Comment apprendre JAVA en 7 jours
Comment installer Bootstrap dans Ruby
Comment utiliser InjectorHolder dans OpenAM
[Swift] Comment envoyer une notification