2015-07-08 1 views
0

Я хочу, чтобы моя программа на C# читала файл, как ожидалось. Как я должен проверить это? Я предполагаю, что просто позвоню своей функции (которая обращается к файловой системе) и увидит вывод, когда файл существует, а когда нет. Должен ли я вместо этого абстрагировать файловую систему?Интеграционное тестирование для чтения файла

Должен ли я даже проверить это (поскольку я в основном тестирую, работает ли StreamReader.ReadLine)?

Моя функция выглядит следующим образом (Filepath, filePath2, а и Ь аргументы функции)

try 
{ 
    TextReader tr = new StreamReader(filePath); 

    a = tr.ReadLine(); 
    b = tr.ReadLine(); 
    tr.Close(); 
} 
catch (Exception ex) 
{ 
    error = GetError(ex); 
} 
if (error != "") { 
    File.WriteAllText(filePath2+"Error.txt", error); 
} 
+1

Что вы сказали во втором абзаце ... если весь ваш тест выполняется, это тестирование платформы .NET, я бы не стал беспокоиться. Но это мнение только одного человека. –

ответ

0

Два наиболее распространенным подход: фасадный для всех файловых операций ввода-вывода (так что вы можете дразнить его) или реорганизовать код, который вам нужен только для проверки фрагментов, которые позволяют легко обмануть объекты, такие как Stream.

Пример второго подход: рефакторинг кода в часть, которая имеет дело с получением потока и другой, который на самом деле читать данные:

public class MyClass 
{ 
    ............. 
    string a; 
    string b; 
    public ReadTheData(Stream stream) 
    { 
    try 
    { 
     TextReader tr = new StreamReader(stream); 

     a = tr.ReadLine(); 
     b = tr.ReadLine(); 
     tr.Close(); 
    } 
    catch (Exception ex) 
    { 
     // awful practice... Don't eat all exceptions 
     error = GetError(ex); 
    } 
    if (error != "") { 
     // whatever log infrastructure you have, need to be mock-able for tests 
     Logger.Log(error); 
    } 
    } 
} 

Теперь вы можете модульное тестирование ReadTheData метода без какого-либо доступа к файловой системе, передавая заполненным out MemoryStream или даже издеваться над потоком.