Disons que nous avons ce ENUMÉviter le couplage lors de l'utilisation ENUM dans les tests
enum Action: String {
case doThing
case doOtherThing
}
Ce ENUM est utilisé de cette façon:
func run(action: Action, block:() -> Void)
Maintenant, je test unitaire la méthode run
donc je dois passer un Action
ainsi:
func testActionRun() {
let expect = expectation(description: #function)
let sut = ActionRunner()
sut.run(action: .doThing) {
expect.fulfill()
// Assert something
}
waitForExpectations(timeout: 0.1, handler: nil)
}
Comme je l'ai besoin de tester d'autres situations sur ActionRunner
, j'ai terminé avec beaucoup de .doThing
répartis sur l'ensemble de la suite de tests.
Le problème est: si je fais une modification dans le code de production et change case doThing
en case doThatThing
maintenant toute ma suite de tests échoue parce qu'il n'y a pas case doThing
.
L'idéal serait de déclarer un case
factice dans le code de test pour permettre quelque chose comme
sut.run(action: .dummyAction) {
}
mais enum
ne permet pas car elle ne permet ni l'héritage d'une extension d'ajouter un case
.
La première option qui m'est venue à l'esprit était de convertir Action
en protocole, mais ce changement est inutile en production et son seul but est d'accomplir quelque chose dans le code de test.
Alors, existe-t-il une autre option pour y parvenir?
Merci beaucoup @mokagio. Cela me semble parfait, il découle très élégamment une chose d'une autre. – emenegro
Je suis content que vous ayez aimé ma suggestion @emenegro, laissez-moi savoir comment ça se passe :) – mokagio