Testen von optionalen Argumenten

Testen von Access-Anwendungen

Testen von optionalen Argumenten

Beitragvon Christoph Jüngling » Mi 17. Nov 2010, 13:51

Ich frage mich gerade, wie man beim Testen mit optionalen Argumenten sinnvoll umgehen sollte. Streng genommen müsste man ja auch das Fehlen eines solchen Parameters im Aufruf testen, denn das ist ja eine mögliche Situation. Lustig wird es, wenn es mehrere solcher Parameter sind, dann steigt die Anzahl der Kombinationen schnell an, wofür gerade für die automatisierte Erstellung von Testroutinen eine große Hilfe wäre.

(Vielleicht passt das Thema auch nicht unbedingt in diesen Thread, dann verschiebt es einfach.)
/edit (Josef): ... wurde verschoben. ;)
Christoph Jüngling
Tester
 
Beiträge: 43
Registriert: Mi 13. Okt 2010, 08:29
Wohnort: Kassel, Deutschland, Europa, Terra
Accessversion: 2003, 2010
Access-Erfahrung: Experte

Beitragvon Josef Pötzl » Do 18. Nov 2010, 22:47

Hallo!

Meinst du "optionale Argumente" im Sinne von Empty bei Variant-Datentyp oder mit optionalen Werten.

Code: Alles auswählen
public sub MachWas(byval xyz as Variant)

vs.
Code: Alles auswählen
public sub MachWas(byval xyz as string = "abc")


Bei der letzten Variante könnte man den Test eigentlich mit den Standardwerten durchführen ... obwohl das genau genommen kein sicherer Test ist, da dann nicht auffällt, falls der Standardwert in der Funktion-Deklaration geändert wurde. => Beim Testen immer die Standardwerte weg lassen.

Aber anders gefragt: ergibt die Nutzung von unterschiedlichen Parametern nicht auch unterschiedliche Testszenarien, für die es sich sogar lohnt, einen eigenen Test zu schreiben?
(Anm.: Mir fällt kein Beispiel ein, wo ich je nach Bedarf unterschiedliche optionale Parameter nutze.)

mfg
Josef
Josef Pötzl
Moderator
 
Beiträge: 764
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)

Re:

Beitragvon Christoph Jüngling » Sa 12. Mär 2011, 15:17

VBA unterstützt ja das Schlüsselwort "optional":
Code: Alles auswählen
Public Sub Prozedurname(Optional ByVal variable As Typ = Startwert)
Public Sub Prozedurname(Optional ByVal variable As Variant)


Im ersten Fall gebe ich dir Recht, denn dann ist der Parameter ja immer vorhanden, zur Not mit seinem Standardwert. Der zweite Fall erfordert unter Umständen ein IsMissing() im Code, ist daher generell aufwändiger und erfordert daher einen separaten Test.

In gewisser Weise sind optionale Parameter in VBA mit dem Überladen von Funktionen zu vergleichen, allerdings wie gesagt mit erheblich freieren Kombinationsmöglichkeiten. Vielleicht sollte man gar nicht alles ausnutzen, was VB/VBA erlauben.
Christoph Jüngling
Tester
 
Beiträge: 43
Registriert: Mi 13. Okt 2010, 08:29
Wohnort: Kassel, Deutschland, Europa, Terra
Accessversion: 2003, 2010
Access-Erfahrung: Experte

Re: Testen von optionalen Argumenten

Beitragvon Josef Pötzl » Sa 12. Mär 2011, 15:54

Optional Parameter zum Auslassen von "Standardwerten" nutze ich gerne. Ich würde aber optionale Parameter nicht verwenden, um unterschiedliche Varianten auszuführen.

Beispiel:
Code: Alles auswählen
Public Function ExecuteQueryDefByName(ByVal QueryName As String, _
                             Optional ByVal QueryParamDefs As Variant) As Long
    dim qdf as dao.querydef
    set qdf = me.currentdb.Querydefs(QueryName)
    ExecuteQueryDefByName = ExecuteQueryDef(qdf, QueryParamDefs )
End Function

Public Function ExecuteQueryDef(ByVal qdf As DAO.QueryDef, _
                       Optional ByVal QdfParamDefs As Variant) As Long
...
End Function


Ich würde die Prozedur keinesfalls so gestalten:
Code: Alles auswählen
Public Function ExecuteQueryDef(Optional ByVal QueryName As String, _
                                Optional ByVal qdf As DAO.QueryDef = nothing, _
                                Optional ByVal QueryParamDefs As Variant) As Long
    if qdf is nothing then
        set qdf = me.currentdb.Querydefs(QueryName)
    end if
    ...
End Function


Ich würde den Aufruf auch nicht so gestalten:
Code: Alles auswählen
Public Function ExecuteQueryDef(ByVal QueryDefOrName As Variant, _
                       Optional ByVal QueryParamDefs As Variant) As Long
    dim qdf as dao.querydef
    if IsObject(QueryDefOrName)
       set qdf = QueryDefOrName
    else
        set qdf = me.currentdb.Querydefs(QueryName)
    end if
    ...
End Function


Allerdings könnte ich mir so etwas vorstellen:
Code: Alles auswählen
Public Function ExecuteQueryDef(ByVal QueryName As String, _
                       Optional ByVal QueryParamDefs As Variant) As Long
    dim qdf as dao.querydef
    set qdf = me.currentdb.Querydefs(QueryName)
    ExecuteQueryDefByName = ExecuteQueryDef(qdf, QueryParamDefs )
End Function

Public Function ExecuteQueryDef(ByVal qdf As DAO.QueryDef, _
                       Optional ByVal QdfParamDefs As Variant) As Long
   ...
End Function

.. nur das funktioniert in VB6/VBA nicht. ;)
=> Unterschiedliche Prozedurnamen werden erforderlich.

mfg
Josef
Josef Pötzl
Moderator
 
Beiträge: 764
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2010 (2013)


Zurück zu AccUnit

cron