Tests et Delegate

Bonjour à  tous,


 


J'affine mes connaissances dans les classes XCTests. J'ai pas mal avancé mais il y a un truc que je ne vois pas du tout comment faire.


 


J'ai une classe qui adopte un protocole et un sytème de déléguation. Je voudrais faire des XCtest pour vérifier que les func du délégate sont bien appelées dans les bon cas :[


 


Voici le genre de classe que je voudrais tester



protocol  PersonDelegate: class {
    func changeEmail(email: String)
   func canNotChangeEmail(invalidString: String)
}

class Person {
    // MARK: - Vars
    var name: String
    var email: String


    weak var delegate: PersonDelegate?

func tryToChangeEmailWith (s: String) {

// bla bla bla
// C'est un bon email, j'averti le délégué
self.delegate?.changeEmail(s)

// bla bla bla
// Ce n'est pas un email valide, j'averti le délégué
self.delegate?.canNotChangeEmail (s)

}

}

    


J'ai essayé de résumé ma classe, mais si ce n'est pas clair n'hésitez pas à  me demander des explications...


 


Dans ma class test je voudrais tester que lorsque j'envoie "name@domain.com" le délégué est bien appelé et quand j'envois "nimporteQuoiCommeAdresseEmail" le délégué canNotChangeEmail est bien appelé.


  


Mots clés:

Réponses

  • J'ai trouvé cela :


     


    http://www.mokacoding.com/blog/testing-delegates-in-swift-with-xctest/


     


    Mais je ne comprends pas où et comment déclarer la classe SpyDelegate conforme au delegate


  • CéroceCéroce Membre, Modérateur
    Le plus simple est de rendre la XCTest conforme au protocole de délégation.
    Ajoute une XCTExpectation en propriété pour chaque méthode déléguée.
    Dans la méthode déléguée, appelle simplement expectation.fullfill().
    Ceci permet de vérifier que la méthode déléguée a bien été appelée.

    Je ne vois pas un grand intérêt à  déclarer une classe SpyDelegate. (ça allège éventuellement, la classe de test, mais bon).
  • Merci pour votre aide, 


     


    Je reviendrais la dessus. Finalement je me suis passé du protocol de délégation en utilisant des func avec completion(success: Bool).


Connectez-vous ou Inscrivez-vous pour répondre.