Seite 2 von 2

Re: Meine Fragen zu AccUnit

BeitragVerfasst: Fr 5. Jun 2015, 11:44
von Josef Pötzl
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

Re: Meine Fragen zu AccUnit

BeitragVerfasst: Fr 5. Jun 2015, 11:59
von Andreas Vogt
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:

Re: Meine Fragen zu AccUnit

BeitragVerfasst: Fr 5. Jun 2015, 12:26
von Josef Pötzl
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.

Re: Meine Fragen zu AccUnit

BeitragVerfasst: Fr 5. Jun 2015, 13:37
von Josef Pötzl
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

Re: Meine Fragen zu AccUnit

BeitragVerfasst: Fr 5. Jun 2015, 14:29
von Andreas Vogt
Hallo,
cool, danke.

Gruß Andreas

Re: Meine Fragen zu AccUnit

BeitragVerfasst: Mi 10. Jun 2015, 09:46
von Andreas Vogt
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