2016-02-18 2 views
2

У меня есть открытый метод, который вызывает частный метод, и он находится в цикле.Как проверить количество вызовов частных методов в 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 
} 

Как я могу проверить количество раз, которое вызывал этот внутренний частный метод? Я пытался использовать Isolate.Verify.GetTimesCalled, но, по-видимому, он не подходит для частных методов.

+2

Если вам это нужно, вы [делаете это неправильно] (http://stackoverflow.com/questions/105007/should-i-test-private-methods-or-only-public-ones). Чтение файла и обработка его совершенно разные вещи. Разделите эту логику и протестируйте ее отдельно. – CodeCaster

+0

Спасибо за совет, но это моя учебная задача. Невозможно изменить логику, но мне нужно протестировать ее, как мне сказали сделать –

ответ

3

Отказ от ответственности. Я работаю в Typemock.

Вы правы, Isolate.Verify.GetTimesCalled() недоступен для непубличных методов. Вы можете подсчитать количество метода было вызвано использованием 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); 
} 

Вы можете прочитать больше о непубличных API here.

+0

Спасибо, это работает для меня! –

Смежные вопросы