Meine Fragen zu AccUnit

Testen von Access-Anwendungen

Re: Meine Fragen zu AccUnit

Beitragvon Josef Pötzl » Fr 5. Jun 2015, 11:44

Ich kann ja schlecht das Modul öffnen und die Enum Items zählen lassen.

Das kann man im Prinzip schon per Code machen, da man den Test so gestalten müsste, dass vorher bekannte Enum-Codezeilen entstehen müssten.

Prinzip:
1. Tabelle leeren
2. exakt definierte Key einfügen
3. Per Code erzeugte Enum-Zeilen mit im Test definierter String-Konstante vergleichen.

... der Aufwand lohnt sich aber nicht unbedingt. ;)

LG
Josef
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016

Re: Meine Fragen zu AccUnit

Beitragvon Andreas Vogt » Fr 5. Jun 2015, 11:59

OK, doch man kann.
Hier nun der Test für UpdateEnum:
Code: Alles auswählen

Public Sub UpdateEnum_StateUnderTest_ExpectedBehaviour()
    ' Arrange
   Const TestKeyName As String = "test_UpdateEnum"
    Dim enumFound As Boolean
    Dim lastIndex As Long
    Dim EL As Long, EC As Long
   
    ' Act
   lastIndex = DCount("*", OptionManager.DataSource) + 1
    OptionManager.SettingByName(TestKeyName) = "0"
    OptionManager.UpdateEnum
   
    With Application.VBE.ActiveVBProject.VBComponents("OptionManagerhelper")
        With .CodeModule
            enumFound = .Find(TestKeyName & " = " & lastIndex, 1, 1, EL, EC)
        End With
    End With
   
    'Aufräumen
   OptionManager.DeleteByName TestKeyName
    OptionManager.UpdateEnum
   
    ' Assert
   Assert.That enumFound, Iz.True
End Sub


nehme ich jetzt das erste EnumUpdate raus, gibts einen Fehler. Ansonsten läuft er jetzt durch.

Andreas

BTW: der Aufwand lohnt sich für mich insofern dass ich dabei lerne Tests zu schreiben. Also purer Eigennutz :mrgreen:
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Re: Meine Fragen zu AccUnit

Beitragvon Josef Pötzl » Fr 5. Jun 2015, 12:26

Dann solltest du den Test aber richtig sauber machen und die Enum-Änderung in einer anderen Access-Anwendung laufen lassen, als der Test läuft, damit der Test richtig abgeschlossen ist und nicht die danach laufenden Tests verabschiedet. ;)

Dafür müsstest du dann eine extra Test-Anwendung per Code erstellen, die Codemodule dort einbinden und in dieser Anwendung die Methoden aufrufen. Dafür wird vermutlich in der anderen Anwendung auch eine FActory-Funktion notwendig, damit du an die Instanz des OptionManagers kommst.
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016

Re: Meine Fragen zu AccUnit

Beitragvon Josef Pötzl » Fr 5. Jun 2015, 13:37

Wenn du den OptionManager nach einem SVN-Repo-Update neu importierst und "inkl. Test" auswählst, kannst du ein Beispiel (_test/usability/OptionManagerTests.cls) sehen, wie der Test über eine Zusatz-Accessanwendung durchlaufen würde.

mfg
Josef
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016

Re: Meine Fragen zu AccUnit

Beitragvon Andreas Vogt » Fr 5. Jun 2015, 14:29

Hallo,
cool, danke.

Gruß Andreas
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Re: Meine Fragen zu AccUnit

Beitragvon Andreas Vogt » Mi 10. Jun 2015, 09:46

So, hab mich intensiv mal durch die Aufzeichnung "AccUnit Einsatz in der Praxis" gewühlt, und auch einiges getestet.
Dabei ist mit bei MsgBox-Tests bei Row-Tests was aufgefallen.
Die Deklaration ist imo doch diese:
'AccUnit:Row(Parameterliste).ClickingMsgBox(MsgBox_Click_Vorschriftenliste).Name = "TestNamenbezeichner"
Denke damit liege ich richtig.

Jetzt habe ich folgende Deklarationen von Row-Tests:
Code: Alles auswählen
'AccUnit:Row(0, 50).ClickingMsgBox(vbYes, vbNo).Name = "A, B / (vbYes,vbNo)"
'AccUnit:Row(0, 100).ClickingMsgBox(vbYes, vbYes).Name = "A, B / vbYes, vbYes"
'AccUnit:Row(50, 100).ClickingMsgBox(vbYes, vbNo).Name = "A, B / vbYes - vbNo"
'AccUnit:Row(100, 150).ClickingMsgBox(vbYes, vbNo).Name = "A, B / vbYes; vbNo"


In der Testliste Spalte Name steht folgendes:
Code: Alles auswählen
Row1: A, B / (6,7)
Row2: A, B /6, vbYes
Row3: A, B / vbYes - vbNo
Row4: A, B / vbYes; vbNo


Irgendwie ist da was falsch verdrahtet dass aus vbYes eine 6 und aus vbNo eine 7 wird.

Gruß Andreas
Andreas Vogt
Entwickler
 
Beiträge: 165
Registriert: Do 18. Mär 2010, 18:00
Wohnort: Offenburg
Accessversion: 2.0, 97, 2002, 2003, 2007, 2010
Access-Erfahrung: Fortgeschritten

Vorherige

Zurück zu AccUnit