Custom Checks¶
ecu.test kann um eigene Prüfungen für Packages, Projekte und Analysepackages erweitert
werden. Custom Checks werden als Python-Klassen implementiert und aus UserPyModules
geladen.
Überblick¶
Custom Checks werden über die Modulkonstante MODULE_TYPE und die passende Basisklasse erkannt:
'PACKAGE_CHECK'mitAbstractPackageCheck'PROJECT_CHECK'mitAbstractProjectCheck'ANALYSIS_PACKAGE_CHECK'mitAbstractAnalysisPackageCheck
Info
Die Schnittstelle ist in der ecu.test Interface Python Bibliothek ecutest-interface
enthalten.
Ablage und Struktur¶
Eigene Check-Module werden im Workspace unterhalb von UserPyModules abgelegt.
Die Klasse muss folgende Methoden bereitstellen:
GetName()Run(item)mit einer Rückgabe als Liste vonCheckResult-Einträgen
Minimales Beispiel für einen Package-Check¶
from tts.interface.customCheck import AbstractPackageCheck, CheckResult
MODULE_TYPE = 'PACKAGE_CHECK'
class MyPackageCheck(AbstractPackageCheck):
def __init__(self, internalApi):
self._internalApi = internalApi
def GetName(self):
return 'MyPackageCheck'
def Run(self, package):
checkResults = []
if len(package.GetDescription()) == 0:
checkResults.append(CheckResult('Description must not be empty!'))
return checkResults
Prüfergebnisse und Schweregrade¶
Jeder Fund wird als CheckResult beschrieben.
Unterstützte Schweregrade sind:
notewarningerrorexception
Felder ID und Origin¶
CheckResult unterstützt außerdem die optionalen Felder id und origin.
ididentifiziert den Fundtyp. Dieses Feld kann im benutzerdefinierten Check gesetzt werden (z.B.invalid-var-name,deprecated-parameter).originNamensraum eines Bibliotheksworkspaces oder ‚internal‘ für mitgelieferte Checks. Wird von ecu.test gesetzt.
Beispiel mit id¶
from tts.interface.customCheck import CheckResult, Severity
result = CheckResult(
'Variable name does not match naming convention.',
severity=Severity.WARNING,
id='invalid-var-name',
)
Optionale Fixes¶
Custom Checks können Fixes bereitstellen, die im selben Prüfungsdialog über das Kontextmenü
anwendbar sind. Fixes werden über Fix definiert und liefern ein FixResult zurück.
Der Callback erhält das geprüfte Element und ein Progress-Objekt.
import os
from tts.interface.customCheck import AbstractPackageCheck, CheckResult
MODULE_TYPE = 'PACKAGE_CHECK'
class DesignerPackageCheck(AbstractPackageCheck):
def __init__(self, internalApi):
self._internalApi = internalApi
def GetName(self):
return 'MyDesignerPackageCheck'
def InsertDesigner(self, package, progress):
progress.SetCaption('Applying fix...')
package.Attributes.SetValue('Designer', os.getlogin())
return FixResult(Result.FIXED, 'Fix applied.')
def Run(self, package):
checkResults = []
if 'Designer' not in package.Attributes.GetNamesAndValues():
checkResults.append(
CheckResult(
'Designer must not be empty!',
severity=Severity.WARNING,
fixes=[
Fix('Insert currently logged in user', self.InsertDesigner),
],
)
)
Info
ecu.test enthält Vorlagen für Custom Checks, die beim Start der Anwendung in den Workspace kopiert werden können.