Hallo! Es sind 3 Wochen vergangen (mehr als das da ich aufgrund einiger Netzwerkprobleme, die ich hier hatte, gestern nicht aktualisieren konnte) und die bisherigen Fortschritte waren gut – lasst uns loslegen! Im Blog der letzten Woche hatte ich begründet, warum der Rendering-Teil als Bibliothek entwickelt wird, anstatt direkt mit dem Framework (MLT) zu beginnen, denn einer der Vorteile ist, dass der Testprozess sehr viel einfacher integriert werden kann. Und genau das habe ich in der letzten Woche getan – das Testmodul für die Bibliothek zu schreiben, d.h. Unit-Tests zu schreiben. Dies war ziemlich interessant, da es mir eine Sichtweise gab, wie der Code an verschiedenen Punkten brechen kann. Das entscheidende Konzept von Unit-Tests besteht darin, sicherzustellen, dass es keine Regressionen (Rückfälle/Rückschritte) gibt. Dies bedeutet, dass der Code bestimmte Dinge ausführt, die er ausführen soll, wenn wir sicher sind, dass er richtig funktioniert und dies zu jedem Zeitpunkt in der Zukunft auch immer noch zuverlässig ausführt, wenn er richtig funktioniert – Nett, nicht wahr? Unit-Tests testet, wie der Name schon sagt, Units (Einheiten) – wir nehmen jede funktionale Einheit eines Codes (oder einfach eine Funktion / Methode) und testen bestimmte Charakteristiken und stellen sicher, dass deren Bedingungen erfüllt sind. Ein Beispiel, das ich aus einem meiner Unit-Tests auswählte ist die Methode QmlRenderer :: initializeRenderParams (…)
m_renderer->initialiseRenderParams(QDir::cleanPath(rootPath.currentPath() + "/../sampledata/test.qml"), "test_output", QDir::cleanPath(rootPath.currentPath() + "/../sampledata/output_lib/"), "jpg", QSize(1280,720), 1, 1000, 25);
QVERIFY2(m_renderer->getStatus() != m_renderer->Status::NotRunning, "STATUS ERROR:Not supposed to be running");
QVERIFY2(m_renderer->getActualFrames()!=0, "VALUE ERROR: Frames not supposed to be zero");
QVERIFY2(m_renderer->getSceneGraphStatus()!=false, "SCENE GRAPH ERROR: Scene graph not initialised");
QVERIFY2(m_renderer->getAnimationDriverStatus()==false, "ANIMATION DRIVER ERROR: Driver not supposed to be running");
QVERIFY2(m_renderer->getfboStatus()==true, "FRAME BUFFER OBJECT ERROR: FBO not bound");
Wie der Name vermuten lässt, ist diese Methode recht einfach: Sie initialisiert die Parameter (wie Fps, Dauer usw.) die wir zum Rendern benötigen und ich überprüfe, ob diese Parameter tatsächlich initialisiert wurden. Ich mache dies für jede der Methoden und führe sie nacheinander aus. Der Rendering-Ablauf sieht folgendermaßen aus:
initializeRenderParams(…) -> renderQml() -> renderEntireQml() or renderSingleFrame()
Es gibt auch Integrationstests, die den tatsächlich gerenderten QML-Inhalt verifizieren. Wie mache ich das?
Indem ich ein Verzeichnis korrekt gerenderter Frames habe und es mit dem vergleiche, was die Bibliothek zu bestimmten Zeitpunkten produziert.
Das heißt, wir haben jetzt eine komplette Bibliothek, die das gesamte Rendering beherrscht, das der MLT-Produzent (über den ich als nächstes schreiben möchte) benötigt.
Als nächstes: MLT Producer.
Sie finden den Code hier
Übersetzung des Artikels von