[Java-Anfängerangst] In Junit implementierter schwer zu testender Code

Eines Tages schrieb ich diesen Code

@Inject
private Accessor accessor;

@Dependent
public class DataReader {

   String getData(String key) {

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

		return value;

	}
}	

Lass uns testen! Hier ist der Test, den ich zum Denken geschrieben habe

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"));
	}
}
Als ich ihn jedoch konsultierte, dass er keinen Erfolg haben würde, sagte er: "Das wird nicht gelingen, es ist schwer zu testen."
In Test when (accessor.getByDate (Schlüssel, neues Datum ())). ThenReturn (jetzt); und tatsächlich accessor.getByDate (Schlüssel, getNow ()) aufrufen, ändert sich der Wert des Argumentes vom Typ Datum. Ich habe versagt, weil ich gelandet bin

Überarbeitet

@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();

		//Das ist auch gut
		//when(deviceOptionReader.getNow()).thenReturn(now);
		doReturn(now).when(deviceOptionReader).getNow();

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

Gebote

Schreiben Sie keinen Code, der einen neuen Datumstyp erstellt, direkt in das Argument der Methode

Recommended Posts

[Java-Anfängerangst] In Junit implementierter schwer zu testender Code
Java mit Visual Studio Code
Schreiben Sie Java8-ähnlichen Code in Java8
Errate den Zeichencode in Java
Anfänger spielen Janken-Spiele in Java
Java Spring-Umgebung in vs Code
[Für Anfänger] Führen Sie Selenium auf Java aus
Alle gleichen Hash-Code-Zeichenfolgen in Java
[Mac] Installieren Sie Java in Visual Studio Code
Implementierung eines grundlegenden Such- / Sortieralgorithmus in Java
Fügen Sie in Java in Visual Studio Code die Option --enable-Preview hinzu
Techniken zum Lesen von Java-Quellcode in Eclipse
[Für Anfänger] Ich habe versucht, JUnit 5 mit Eclipse zu verwenden
Führen Sie eine statische Code-Analyse mit Checkstyle mit Java + Gradle durch
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
[AtCoder Problem-ABC001] C-Do Windbeobachtung in Java [Code]
[Mac] Java in Visual Studio Code installieren (VS Code)
Führen Sie Java-Code skriptweise aus
Java-Code-TIPPS
Partisierung in Java
Java-Beispielcode 02
Java-Beispielcode 03
Janken in Java
Java-Beispielcode 04
Java-Zeichencode
Umfangsrate in Java
FizzBuzz in Java
Beispielcode zum Konvertieren von List in List <String> in Java Stream
Java-Anfänger machen Pokerspiele in 4 Tagen (3. Tag)
Schreiben Sie keinen Code, wenn (isAdmin == true) in Java
[Für Anfänger] Mindestbeispiel für die Anzeige von RecyclerView in Java
Java-Anfänger machen Pokerspiele in 4 Tagen (2. Tag)
Java11: Führen Sie Java-Code unverändert in einer einzelnen Datei aus
Unterschiede im Code bei Verwendung des Längensystems in Java