[JAVA] Écraser le contenu de la configuration avec Spring-boot + JUnit5

introduction

Si vous utilisez Mockito, vous pouvez l'utiliser immédiatement, mais je voulais en prendre note, alors je l'ai écrit sous forme d'article.

environnement

Java9 Spring-boot 2.0.0.RELEASE

L'objectif de cette fois

Réécrivez le jeu de configuration dans la classe Service de Junit au lieu de lire le fichier de configuration de test.

pom.xml Il est écrit dans d'autres articles, mais je le vérifierai toujours, donc je l'écrirai en attendant.

<?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">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.tasogarei</groupId>
	<artifactId>junit-test</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>junit-test</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.0.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>9</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.0.1</version>
            <scope>test</scope>
        </dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

Service Il existe une méthode privée mystérieuse, mais je veux juste essayer autre chose après cela. s'il te plait ne t'inquiète pas.

package com.tasogarei.app.service;

import java.util.Properties;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.tasogarei.app.util.TestConfig;

@Service
public class TestService {
    
    @Autowired
    private TestConfig config;
    
    public String getString() {
        return getStr();
    }
    
    private String getStr() {
        return config.getTest();
    }    
}

config Cette fois, nous le ferons sur la base de l'annotation de configuration.

package com.tasogarei.app.util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TestConfig {
    @Value("${app.test}") 
    private String test;

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }
}

application.properties


app.test=configtest

Mettez une valeur appropriée dans ʻapplication.properties`.

Classe d'essai

Si vous le faites Mock avec @ MockBean et faites le contenu que vous voulez réécrire avec Mockito.when (). Then (), celui qui a été transformé en Mock dans le test sera utilisé, donc ce n'est pas grave. Même si la valeur de retour de la méthode spécifiée par when est une classe, si vous entrez la classe que vous voulez réécrire avec then, cette classe sera utilisée, vous pouvez donc tester avec elle. Bien sûr, les types doivent être les mêmes.

package com.tasogarei.app.service;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.Properties;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import com.tasogarei.app.util.TestConfig;

@ExtendWith(SpringExtension.class)
@SpringBootTest
public class TestServiceTest {

    @Autowired
    private TestService testService;
    
    @MockBean
    private TestConfig testConfig;
    
    @Test
    public void test() {
        Mockito.when(testConfig.getTest()).thenReturn("hogehoge123");
        assertEquals(testService.getString(), "hogehoge123");
    }
}

finalement

Je pense que la réécriture avec la méthode de test est subtile, donc je pense qu'il vaut mieux faire ce qui peut être fait avant le traitement là-bas.

Recommended Posts

Écraser le contenu de la configuration avec Spring-boot + JUnit5
Tester le contenu d'un fichier Excel avec JUnit
Vérifiez le contenu des paramètres avec le levier
Mettre en forme le contenu de LocalDate avec DateTimeFormatter
Vérifiez le contenu de l'objet argument avec Mockito
Lister le contenu des catégories créées avec Active Hash
[JUnit 5] Traiter de "la référence d'assertEquals est ambiguë"
Changer de port avec SpringBoot
[Rails] Vérifiez le contenu de l'objet
Remplacez le contenu du fichier Jar
Les bases de SpringBoot + MyBatis + MySQL
[Ruby] Afficher le contenu des variables
Essayez HelloWorld avec la configuration minimale de Heroku Java spring-boot
Écraser le téléchargement du fichier avec le même nom avec BOX SDK (java)
Vérifiez le contenu du magasin de certificats Java
Mémo: [Java] Vérifiez le contenu du répertoire
Pliage et dépliage du contenu de la vue Recycleur
[Ruby] Coupez le contenu des publicités Twitter
Vérifiez le contenu du traitement avec [rails] binding.pry
Utiliser SSIServlet avec Tomcat intégré SpringBoot 2.2.4
À propos du traitement de BigDecimal (avec réflexion)
Le contenu des données enregistrées par CarrierWave.
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
Après tout, je voulais prévisualiser le contenu de mysql avec Docker ...
JAVA: jar, aar, affichez le contenu du fichier
Personnalisez la répartition du contenu de Recyclerview
Test JUnit facile de la version Elasticsearch 2018 avec Embedded-elasticsearch
Gérez la version de Ruby elle-même avec rbenv
L'histoire du réglage de l'application Android avec libGDX
Je veux var_dump le contenu de l'intention
Calculer le score de similarité des chaînes de caractères avec JAVA
Préparez l'environnement CentOS 8 avec Sakura VPS
Spécifiez la valeur par défaut avec @Builder of Lombok
Mesurez la distance du labyrinthe avec la recherche de priorité de largeur
J'ai vérifié le nombre de taxis avec Ruby
[Docker] Comment voir le contenu des volumes. Démarrez un conteneur avec les privilèges root.
Implémentons une fonction pour limiter le nombre d'accès à l'API avec SpringBoot + Redis
Erreur lors du démarrage de JUnit avec une version obsolète de POI
J'ai examiné le cycle de vie de l'extension de JUnit Jupiter
JavaFX --Match la taille d'ImageView avec d'autres nœuds
Obtenez le nom du scénario de test dans la classe de test JUnit
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
L'histoire de la création d'un proxy inverse avec ProxyServlet
Surveillez l'état interne des programmes Java avec Kubernetes
Implémentez iOS14 UICollectionView avec le code minimum requis.
Vérifiez le comportement de Java Intrinsic Locks avec bpftrace
Résumé personnel des types souvent utilisés dans JUnit 4
Test unitaire de l'API Web et test d'intégration avec SpringBoot + Junit5, 4 modèles
[Rails] Comment obtenir le contenu des paramètres forts
Vérifiez le résultat de l'inférence de paramètre de type générique avec JShell
Java: utilisez Stream pour trier le contenu d'une collection
À peu près le flux de développement d'applications Web avec Rails.
Contrôlez le flux de traitement Spring Batch avec JavaConfig.
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
Remplacez seulement une partie de l'hôte URL par java
Je veux recréer le contenu des actifs à partir de zéro dans l'environnement construit avec capistrano