[Angoisse du débutant Java] Code difficile à tester implémenté dans Junit

Un jour, j'écrivais ce code

@Inject
private Accessor accessor;

@Dependent
public class DataReader {

   String getData(String key) {

		String value = accessor.getByDate(key, new Date());

		return value;

	}
}	

Testons! Voici le test que j'ai écrit en pensant

public class DataReaderTest {
	
	@Mock
	Accessor accessor;
	
	@InjectMocks @Spy
	DataReader dataReader;
	
	@Before
	public void setUp() throws Exception {
		MockitoAnnotations.initMocks(this);
	}

	@Test
	public void test() {
		when(accessor.getByDate(key, new Date())).thenReturn(now);
		assertThat(dataReader.getData("key0"), is("todayData"));
	}
}
Cependant, quand je l'ai consulté pour dire qu'il ne réussirait pas ... il a dit: "Cela ne réussira pas, c'est difficile à tester."
Dans Test when (accessor.getByDate (key, new Date ())). ThenReturn (now); est en fait appelé ʻaccessor.getByDate (key, getNow ()) `, la valeur de l'argument de type Date change. J'ai échoué parce que j'ai fini

modifié

@Inject
private Accessor accessor;

@Dependent
public class DataReader {

   String getData(String key) {

		String value = accessor.getByDate(key, getNow());

		return value;

	}
	
	Date getNow() {
		return new Date();
	}
}
public class DataReaderReaderTest {
	
	@Mock
	Accessor accessor;
	
	@InjectMocks @Spy
	DataReader dataReader;
	
	@Before
	public void setUp() throws Exception {
		MockitoAnnotations.initMocks(this);
	}

	@Test
	public void test() {
		Date now = new Date();

		//C'est aussi bien
		//when(deviceOptionReader.getNow()).thenReturn(now);
		doReturn(now).when(deviceOptionReader).getNow();

		when(accessor.getByDate(key, now)).thenReturn(now);
		assertThat(dataReader.getData("key0"), is("todayData"));
	}
}

Commandements

N'écrivez pas de code qui crée un nouveau type Date directement dans l'argument de la méthode

Recommended Posts

[Angoisse du débutant Java] Code difficile à tester implémenté dans Junit
Java avec Visual Studio Code
Écrire du code de type Java8 en Java8
Devinez le code de caractère en Java
Les débutants jouent à des jeux Janken en Java
Environnement Java Spring dans vs Code
[Pour les débutants] Exécutez Selenium sur Java
Toutes les mêmes chaînes de code de hachage en Java
[Mac] Installer Java dans Visual Studio Code
Implémentation d'un algorithme de recherche / tri de base en Java
Ajouter l'option --enable-preview dans Java dans Visual Studio Code
Techniques de lecture du code source Java dans Eclipse
[Pour les débutants] J'ai essayé d'utiliser JUnit 5 avec Eclipse
Analyse de code statique par Checkstyle avec Java + Gradle
Code pour échapper aux chaînes JSON en Java
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
[AtCoder Problem-ABC001] Observation du vent C-Do en Java [Code]
[Mac] Installer Java dans Visual Studio Code (VS Code)
Exécuter du code Java de manière scriptée
CONSEILS relatifs au code Java
Partition en Java
Exemple de code Java 02
Exemple de code Java 03
Janken à Java
Exemple de code Java 04
Code de caractère Java
Taux circonférentiel à Java
FizzBuzz en Java
Exemple de code pour convertir List en List <String> dans Java Stream
Les débutants en Java créent des parties de poker en 4 jours (3ème jour)
N'écrivez pas de code si (isAdmin == true) en Java
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
Les débutants en Java créent des parties de poker en 4 jours (2ème jour)
Java11: exécuter le code Java dans un seul fichier tel quel
Différences de code lors de l'utilisation du système de longueur en Java