[Résolu] Plantage dans une classe test

iLandesiLandes Membre
janvier 2017 modifié dans Xcode et Developer Tools #1

Bonjour, 


 


En executant la classe test ci-dessous j'ai ce message que je ne comprends pas. Le deuxième test passe sans problème. Voici un extrait de mon code.



func testLoginWithValidEmailAndPasswordPassword() {
        let e = expectation(description: "testLoginWithValidEmailAndPasswordPassword")
        // Test Valid email
        let u = User(email: k.validUserEmail)
        u.setPassword(k.validPassword)
        u.login(completion: {success, error in
            XCTAssertTrue(success)
            e.fulfill()
        })
        
        // Wait for the expectation to be fulfilled
        waitForExpectations(timeout: 10) { error in
            if let error = error {
                XCTFail("waitForExpectationsWithTimeout errored: \(error)")
            }
        }
    }
    
    func testLoginWithoutPassword() {
        let e = expectation(description: "testLoginWithoutPassword")
        // Test Valid email
        let u = User(email: k.validUserEmail)
        u.login(completion: {success, error in
            XCTAssertFalse(success)
            e.fulfill()
        })
        
        // Wait for the expectation to be fulfilled
        waitForExpectations(timeout: 10) { error in
            if let error = error {
                XCTFail("waitForExpectationsWithTimeout errored: \(error)")
            }
        }

        
    }

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'API violation - multiple calls made to -[XCTestExpectation fulfill] for testLoginWithValidEmailAndPasswordPassword..


Réponses

  • CéroceCéroce Membre, Modérateur
    Comme le message l'indique, on ne peut appeler expectation.fulfill() qu'une fois par expectation. Active un Exception Breakpoint pour voir où se fait le deuxième appel.
  • iLandesiLandes Membre
    janvier 2017 modifié #3

    Merci Céroce pour ta réponse


     




     Active un Exception Breakpoint pour voir où se fait le deuxième appel.




     


    Comment on fait cela ?


     


    Le truc que je ne comprend pas c'est que je lance mes test un par un avec la petite flèche sur la droite du code. Je n'ai pas mis le code mais j'ai 3 test dont le code est très similaire et seule la première ne marche pas.


  • CéroceCéroce Membre, Modérateur
    janvier 2017 modifié #4

    Comment on fait cela ?

    Xcode, sur la gauche, dans la rubrique Breakpoints.
    Clique sur le + en bas à  droite.
    Ajoute un Exception Breakpoint.
     

    Le truc que je ne comprend pas c'est que je lance mes test un par un avec la petite flèche sur la droite du code. Je n'ai pas mis le code mais j'ai 3 test dont le code est très similaire et seule la première ne marche pas.

    Par exemple, il est possible que le bloc de completion soit appelé deux fois par ton code. Tu aurais donc bien un bug ;-)


  • Par exemple, il est possible que le bloc de completion soit appelé deux fois par ton code. Tu aurais donc bien un bug ;-)




     


    C'est exactement cela, un bug :]


    Merci

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