update
BIN
Writerside/images/image_611.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
Writerside/images/image_612.png
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
Writerside/images/image_613.png
Normal file
After Width: | Height: | Size: 116 KiB |
BIN
Writerside/images/image_614.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
Writerside/images/image_615.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
Writerside/images/image_616.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
Writerside/images/image_617.png
Normal file
After Width: | Height: | Size: 25 KiB |
@ -194,6 +194,7 @@
|
||||

|
||||
- trivialer Code muss nicht getestet werden
|
||||
|
||||
|
||||
## Unit Testing
|
||||
- Beim Unit Testing gehts nicht nur um den technischen Aspekt
|
||||
- möglichst wenig Zeit Input
|
||||
@ -374,3 +375,85 @@
|
||||
- je mehr Parameter, desto schwieriger
|
||||
|
||||
|
||||
## Integration Testing
|
||||
- Verifiziert größeren Teil des Systems (mehrere Units)
|
||||
- aus dem [Controllers-Quadranten](#4-typen-von-produktions-code)
|
||||
- braucht evtl. länger als ein Unit-Test
|
||||
- ist evtl. abhängig von anderen Tests (keine Isolation)
|
||||
|
||||
- Balance zwischen Unit- und Integration-Tests ist wichtig
|
||||
- direktes Arbeiten mit out-of-process-Abhängigkeiten macht Integration Tests langsam
|
||||
- sind teuer zu warten
|
||||
- dafür besserer Schutz gegen Zurückentwicklungen
|
||||
- Integration-Tests für den längsten Happy-Path mit den meisten Abhängigkeiten
|
||||
- Eck-Szenarien des Business-Szenarios mit Unit-Tests
|
||||
|
||||
- Out-of-Process Abhängigkeiten
|
||||
- **Managed** (_Abhängigkeiten über die wir volle Kontrolle haben_)
|
||||
- nur Zugriff über die Applikation
|
||||
- Interaktionen sind für die externe Welt nicht sichtbar
|
||||
- **nicht mocken**
|
||||
- wir wollen, dass die tests fehlschlagen, wenn wir was an der DB ändern bspw.
|
||||
- **Unmanaged** (_Abhängigkeiten über die wir keine Kontrolle haben_)
|
||||
- **mocken**
|
||||
- wir wollen volle Kontrolle über die Tests
|
||||
|
||||
### Integration Testing - Example
|
||||
**Customer Management System**
|
||||

|
||||
- alle User sind in einer DB
|
||||
- Änderungen werden an angeschlossene Anwendungen über Message-Bus geschickt
|
||||
- Business-Rules
|
||||
- Falls Email zur Company-Domain gehört → Employer Status, sonst Customer
|
||||
- System muss Anzahl der Employer tracken (auch beim Wechseln)
|
||||
- Wenn Mail wechselt müssen externe Systeme über MessageBus benachrichtigt werden
|
||||
|
||||

|
||||
|
||||
- **Domain model, Algorithms**
|
||||
- Company
|
||||
- Attribute: `DomainName` `NumberOfEpmoyees`
|
||||
- Methoden: `ChangeNumberOfEmployees(...)` `IsEmailCorporate(...)`
|
||||
- CompanyFactory
|
||||
- Erstellt `Company`-Objekte anhand von DB-Feldern
|
||||
- User
|
||||
- Attribute: `UserId` `Email` `UserType` `EmailChangedEvents[]`
|
||||
- Methoden: `ChangeEmail(...)`
|
||||
- UserFactory
|
||||
- Erstellt `User`-Objekte anhand von DB-Feldern
|
||||
- **Controllers**
|
||||
- UserController
|
||||
- Delegiert die Ausführung von Email-Änderungen
|
||||
- Logik ist gekapselt in den Domain-Klassen
|
||||
- Managed Kommunikation mit out-of-process-Abhängigkeiten
|
||||
- hier: DB und messageBus
|
||||
|
||||
- **Integration Test für den längsten Happy-Path**
|
||||
- geht durch alle Abhängigkeiten
|
||||
- _hier: corporate → non-corporate Mail_
|
||||
- davor: out-of-process-Abhängigkeiten Kategorisieren
|
||||
- was direkt testen, was mocken?
|
||||
- _hier: DB ist managed → direkt testen_
|
||||
- _hier: messageBus ist unmanaged → mocken_
|
||||
- _[OCP](DesignPrinciples.md#o-open-closed-principle-ocp) anwenden durch ein Interface_
|
||||
- 
|
||||
- **Edge-cases mit Unit-Tests**
|
||||
|
||||

|
||||
|
||||
### Integration Testing - Good Practices
|
||||
- Immer einen festen Platz für das [Domain-Model](#domain-model-algorithms) in der Code-Base haben
|
||||
- unit-tests dafür, integration-tests für Controller
|
||||
- Abgrenzung kann unterschiedlich vorgenommen werden
|
||||
- package, namespace, assembly, ...
|
||||
- Möglichst wenig Layer in der Anwendung
|
||||
- Abstraktionen und Generalisierungen → mehr Layer
|
||||
- wird schwer den Code nachzuvollziehen
|
||||
- 
|
||||
- 
|
||||
- Dopplungen im [AAA](#aaa-sequenz)-Schema
|
||||
- teilweise verlockend
|
||||
- 
|
||||
- Falls einer nicht funktioniert geht der andere nicht
|
||||
- Ausnahme:
|
||||
- out-of-process-Abhängigkeit, die nur schwer in den gewünschten Zustand kommt
|