]> juplo.de Git - demos/kafka/training/commitdiff
test: Überprüfung der Fachlogik ergänzt
authorKai Moritz <kai@juplo.de>
Tue, 16 Aug 2022 16:31:45 +0000 (18:31 +0200)
committerKai Moritz <kai@juplo.de>
Tue, 16 Aug 2022 16:32:45 +0000 (18:32 +0200)
* Überall, wo die Fachlogik geprüft wird, wird jetzt sichergestellt,
  dass die berechneten Ergebnisse den Erwartungen entsprechen.
* Überprüft, werden nur die zu dem Zeitpunkt tatsächlich vollständig
  berechneten Ergebnisse. Dadurch wird durch die Überprüfung kein Fehler
  ausgelöst, wenn wegen einem simulierten Fehler noch nicht alle durch
  die erzeugten Nachrichten angeforderten Berechnungen erfolgt sind.

src/test/java/de/juplo/kafka/ApplicationTests.java

index 1a336d684992afaf659fae096445456f67599704..1336050a436a4990c9b8391faa06e86100326ce8 100644 (file)
@@ -3,21 +3,33 @@ package de.juplo.kafka;
 import org.apache.kafka.clients.producer.ProducerRecord;
 import org.apache.kafka.common.serialization.StringSerializer;
 import org.apache.kafka.common.utils.Bytes;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.*;
 import java.util.function.Consumer;
+import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 
 public class ApplicationTests extends GenericApplicationTests<String, String>
 {
+  @Autowired
+  AdderResults results;
+
+
   public ApplicationTests()
   {
     super(new ApplicationTestRecrodGenerator());
+    ((ApplicationTestRecrodGenerator)recordGenerator).tests = this;
   }
 
 
   static class ApplicationTestRecrodGenerator implements RecordGenerator
   {
+    ApplicationTests tests;
+
     final int[] numbers = {1, 7, 3, 2, 33, 6, 11};
     final String[] dieWilden13 =
         IntStream
@@ -29,6 +41,8 @@ public class ApplicationTests extends GenericApplicationTests<String, String>
 
     int counter = 0;
 
+    Map<String, List<AdderResult>> state;
+
     @Override
     public int generate(
         boolean poisonPills,
@@ -36,6 +50,12 @@ public class ApplicationTests extends GenericApplicationTests<String, String>
         Consumer<ProducerRecord<Bytes, Bytes>> messageSender)
     {
       counter = 0;
+      state =
+          Arrays
+              .stream(dieWilden13)
+              .collect(Collectors.toMap(
+                  seeräuber -> seeräuber,
+                  seeräuber -> new LinkedList()));
 
       for (int i = 0; i < 33; i++)
       {
@@ -50,6 +70,8 @@ public class ApplicationTests extends GenericApplicationTests<String, String>
           send(key, value, logicErrors, messageSender);
         }
         send(key, calculateMessage, logicErrors, messageSender);
+
+        state.get(seeräuber).add(new AdderResult(number, (number + 1) * number / 2));
       }
 
       return counter;
@@ -79,5 +101,24 @@ public class ApplicationTests extends GenericApplicationTests<String, String>
     {
       return false;
     }
+
+    @Override
+    public void assertBusinessLogic()
+    {
+      tests.results
+          .getState()
+          .values()
+          .stream()
+          .flatMap(map -> map.entrySet().stream())
+          .forEach(entry ->
+          {
+            String user = entry.getKey();
+            List<AdderResult> resultsForUser = entry.getValue();
+
+            assertThat(state.get(user))
+                .describedAs("Unexpected results for user {}", user)
+                .containsExactlyElementsOf(resultsForUser);
+          });
+    }
   }
 }