2016-02-18 2 views
2

J'ai une méthode publique, qui appelle la méthode privée, et il est dans une boucle.Comment vérifier le nombre d'appels de méthode privée dans typemock

public void FileManipulator(StreamReader file) 
{ 
    string line; 
    while ((line = file.ReadLine()) != null) 
    { 
     if (checkLine(line)) 
     { 
      //some logic 
     } 
     else 
     { 
      putToExceptions(line); 
     } 

    } 
} 

private void putToExceptions(string line) 
{ 
    //some logic 
} 

Comment puis-je vérifier le nombre de fois que cette méthode privée interne a été appelée? J'ai essayé d'utiliser Isolate.Verify.GetTimesCalled, mais il semble ne pas correspondre à des méthodes privées.

+2

Si vous en avez besoin, vous [faites le mal] (http://stackoverflow.com/questions/105007/should-i-test-private-methods-or-only-public-ones). Lire un fichier et le traiter sont des choses totalement différentes. Divisez cette logique et testez-la séparément. – CodeCaster

+0

Merci pour vos conseils, mais c'est ma tâche d'apprentissage. Impossible de changer la logique, mais j'ai besoin de la tester comme on m'a dit de le faire –

Répondre

3

Avis de non-responsabilité. Je travaille à Typemock.

Vous avez raison, Isolate.Verify.GetTimesCalled() n'est pas disponible pour les méthodes non publiques. Vous pouvez compter le nombre de méthode a été appelée à l'aide Isolate.WhenCalled (..) DoInstead():.

[TestMethod, Isolated] 
public void CountPrivateCalls() 
{ 
    int counter = 0; 
    var fileChecker = new FileChecker(); 
    var testFile = new StreamReader("test.txt"); 

    Isolate.NonPublic.WhenCalled(fileChecker, "putToExceptions").DoInstead(context => 
    { 
     counter++; 
     context.WillCallOriginal(); 
    }); 

    fileChecker.FileManipulator(testFile); 

    Assert.AreEqual(3, counter); 
} 

Vous pouvez en savoir plus sur l'API here non publiques.

+0

Merci, ça marche pour moi! –