Hi Rudi,
Super, ich habe mir die Implementierung angesehen. Das ist schon deutlich besser, als das was ich bisher hatte.
Vor allem die Idee sich in $logInform reinzuhängen. Echt klasse. Ich hab mir da immer einen abgemockt um die Logs abfangen zu können.

Ein paar Anregungen / Fragen habe ich aber dennoch:
Deine Lösung mit "FhemTestUtils_gotLog" und "FhemTestUtils_gotEvent" hat mich zum grübeln gebracht.
Ich hätte es allerdings viel lieber, dass ich auf die Logs direkt zugreifen kann und das nicht eine Funktion für mich darin sucht.
Wieso? Weil ich dann einen Compare aus der Testsuit den Inhalt prüfen kann. Das muss man in anderen Datenstruktuen ebenfalls so anwenden und nebenbei bekommt man im Fehlerfall deutlich bessere Meldungen über was steht wirklich in dem Array und nach was wurde gesucht.
Ich schlage daher vor, Subs in das Modul aufzunehmen, die eine Referenz auf @logs und @events liefern. (Siehe Patch).
Habe auch noch einen Kopierfehler im define korrigiert
Damit ließe sich, am Beispiel 00_parseMsg.t der Test wie folgt realisieren und vom Test her genauer steuern was in @logs stehen soll oder auch nicht:
use strict;
use warnings;
use Test2::V0;
use Test2::Tools::Compare qw{is bag};
my $fhemLogs=FhemTestUtils_getLogRef;
{ MQTT2_SERVER_ReadDebug($defs{m2s}, '0(12)(0)(5)helloworld') }
is( $fhemLogs,bag {item !match(qr/ERROR:.*bogus data/); end();}, 'Correct MQTT message');
FhemTestUtils_resetLogs();
{MQTT2_SERVER_ReadDebug($defs{m2s}, '(162)(50)(164)(252)(0).7c:2f:80:97:b0:98/GenericAc(130)(26)(212)4(0)(21)BLE2MQTT/OTA/')}
is( $fhemLogs,bag {item match(qr/ERROR:.*bogus data/); etc(); }, 'Correct MQTT message');
done_testing;
exit(0);
1;
Weiterhin, die Ausgabe der Logmedlungen auf der Konsole. Lassen sich diese abstellen?
Ich würde aus der Testsuit eher auf diag zurückgreifen wenn etwas nicht in Ordnung ist.
Ich habe auch festgestellt, dass sich alle Instanzen von FhemTestUtils das gleiche @logs und @events teilen.
Aktuell bin ich noch unsicher, ob man davon je mehr als eine gebrauchen könnte. Registriert man allerdings mehrere, so dürften die Logs mehrfach in @logs auftauchen und das den Test ggf. verfälschen, wenn man z.B. die Anzahl von Logmeldungen zählen würde?
Der in der Readme angegebene perl Aufruf klappt bei mir nicht:
perl fhem.pl t/00_MQTT2_SERVER/00_parseMsg.t
mit
perl fhem.pl -t t/00_MQTT2_SERVER/00_parseMsg.t
Klappt es.
Der Folgende Satz hat mich auch ein wenig zum Grübeln gebracht:
Each test needs a config file, with is either fhem.cfg or testname.cfg
Wenn ich es richtig verstehe, dann kann ich eine "Default" Config in jedem Verzeichnis ablegen die aber fhem.cfg benannt werden muss. Hier habe ich keinen Gestaltungsspieltaum.
Möchte ich für einen Test eine Spezielle config, dann muss ich für <testname>.t eine config <testname>.cfg anlegen. Habe ich das so richtig verstanden?
Grüße Sidey