[Закрывается] хорошая благоприятная для TDD библиотека IO файла.NET

Главный. Незначительный. BugFix. SVNRevision

, например: 3.5.2.31578

  • Пересмотр SVN приносит Вам очень точный мир кода, отправленного клиенту. Вы абсолютно уверены, было ли это bugfix там или нет.
  • Это также помогает нахождению надлежащего PDB в конечном счете, у Вас есть ошибка приложения. Просто соответствуйте Изменениям SVN на своем сервере сборки, скопируйте PDB в местоположение EXE, откройте отладчик, и Вы получили отслеживание стека катастрофического отказа.
5
задан George Mauer 7 July 2009 в 20:32
поделиться

4 ответа

Думаю, вы ищете этот вопрос и этот пост в блоге . Я только обернул System.IO.File и System.IO.Directory. Ни FileInfo, ни прочего.

3
ответ дан 13 December 2019 в 22:13
поделиться

What's wrong with System.IO.FileInfo?


I was curious, so started to create a set of wrappers using ReSharper. It took me 16 minutes, and I haven't tested it, and don't know if it meets your needs. Still, I thought I'd outline the process I used:

  1. Create a new class library project
  2. Make Class1 public and rename it to be FileSystemInfoWrapper
  3. Give it a private field _fsi of type FileSystemInfo (resolve the class to get the namespace imported)
  4. Click the field and choose to Initialize in Constructor
  5. Click the field again and use ReSharper -> Code -> Generate (Alt+Ins); Choose Generate Delegating Members; Click "Public" to get all public members
  6. Same for FileInfo, but also derive from FileSystemInfoWrapper and remove the duplicate members (ReSharper could have done better here)
  7. Same for DirectoryInfo, but also derive from FileSystemInfoWrapper and fix duplicates
  8. For each of the wrappers, click the class then use ReSharper->Refactor->Extract Interface
  9. Have IFileInfoWrapper and IDirectoryInfoWrapper derive from IFileSystemInfoWrapper, and remove duplicates.

The result is interfaces that include the methods and properties of the corresponding classes, and concrete classes that delegate to the original classes and implement the interfaces. You should then be able to create your own mock classes, and change your code to use the interfaces instead of directly using the System.IO concrete classes.

3
ответ дан 13 December 2019 в 22:13
поделиться

Мне любопытно, что такого ужасного в дизайне пространства имен System.IO . Конечно, выбор определенного интерфейса или класса может быть в некоторой степени произвольным упражнением, но я не знаком с проблемой необходимости передавать строки повсюду.

Возможно, вы могли бы предоставить дополнительную информацию о вашей конкретной проблеме. ?


РЕДАКТИРОВАТЬ

Кажется, вы указываете, что вам нужны классы, основанные на пространстве имен System.IO , что позволит вам тестировать без записи в файловую систему. Я не вижу, как можно адекватно протестировать функцию, которая записывает в файловую систему без нее, ну, ну, записывая в файловую систему. Если вы хотите проверить свою логику с точки зрения письма, то позвольте функциям принимать System.IO.Stream или System.IO. TextWriter , в зависимости от того, что больше подходит. Это позволит вам протестировать различные компоненты вашего кода без необходимости иметь какое-либо внешнее влияние; просто передайте System.IO.MemoryStream вместо System.IO.FileStream . Очевидно, вы не столкнетесь с такими проблемами, как нехватка места, отказ в доступе и т. Д., Но вы никогда не столкнетесь с этими ошибками, не запустив в реальном времени файловую систему. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

в зависимости от того, что более подходит. Это позволит вам протестировать различные компоненты вашего кода без необходимости иметь какое-либо внешнее влияние; просто передайте System.IO.MemoryStream вместо System.IO.FileStream . Очевидно, вы не столкнетесь с такими проблемами, как нехватка места, отказ в доступе и т. Д., Но вы никогда не столкнетесь с этими ошибками, не запустив в реальном времени файловую систему. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

в зависимости от того, что более подходит. Это позволит вам протестировать различные компоненты вашего кода без необходимости иметь какое-либо внешнее влияние; просто передайте System.IO.MemoryStream вместо System.IO.FileStream . Очевидно, вы не столкнетесь с такими проблемами, как нехватка места, отказ в доступе и т. Д., Но вы никогда не столкнетесь с этими ошибками, не запустив в реальном времени файловую систему. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

Это позволит вам протестировать различные компоненты вашего кода без необходимости иметь какое-либо внешнее влияние; просто передайте System.IO.MemoryStream вместо System.IO.FileStream . Очевидно, вы не столкнетесь с такими проблемами, как нехватка места, отказ в доступе и т. Д., Но вы никогда не столкнетесь с этими ошибками, не запустив в реальном времени файловую систему. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

Это позволит вам протестировать различные компоненты вашего кода без необходимости иметь какое-либо внешнее влияние; просто передайте System.IO.MemoryStream вместо System.IO.FileStream . Очевидно, вы не столкнетесь с такими проблемами, как нехватка места, отказ в доступе и т. Д., Но вы никогда не столкнетесь с этими ошибками, не запустив в реальном времени файловую систему. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

просто передайте System.IO.MemoryStream вместо System.IO.FileStream . Очевидно, вы не столкнетесь с такими проблемами, как нехватка места, отказ в доступе и т. Д., Но вы никогда не столкнетесь с этими ошибками, не запустив в реальном времени файловую систему. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

просто передайте System.IO.MemoryStream вместо System.IO.FileStream . Очевидно, вы не столкнетесь с такими проблемами, как нехватка места, отказ в доступе и т. Д., Но вы никогда не столкнетесь с этими ошибками, не запустив в реальном времени файловую систему. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

отказано в доступе и т. д., но вы никогда не столкнетесь с этими ошибками, не запустив прямую проверку файловой системы. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

доступ запрещен и т. д., но вы никогда не столкнетесь с этими ошибками, не запустив прямую проверку файловой системы. Вот почему вы можете предоставить внешние функции, которые принимают System.IO.FileInfo или строковый путь (или массив / IEnumerable <> любого из них, что вам нужно), которые могут предоставить другой уровень живого тестирования.

Пространство имен System.IO довольно хорошо заполнено, и я никогда не сталкивался с тем, что используется особо не объектно-ориентированный подход.

2
ответ дан 13 December 2019 в 22:13
поделиться

Как указывает Роберт, вы можете установить Mylyn и Trac Connector в среду выполнения Eclipse, чтобы получить базовую функциональность. Tasktop необходим, если вам нужна дальнейшая интеграция с рабочим столом, например

  • Ориентированный на задачи просмотр веб-страниц с IE (встроенный) или Firefox (внешний)
  • Интеграция Gmail с Gmail и Outlook / Exchange (создание задач из сообщений)
  • Интеграция календаря Google и Outlook / Exchange (просмотр предстоящих встреч)
  • Связывание локальных документов (просмотр документов в контексте ваших задач)
  • Учет времени (автоматическое создание отчетов)

Tasktop также предоставляет доступ к дополнительным соединителям , если они вам нужны.

Хотя Tasktop Pro не является бесплатным, я призываю вас оценить ценность экономии времени, которую дает Tasktop. Если ваша организация заинтересована в Tasktop для вашей команды, Это - это статья, о которой я говорил.

И это API (созданный из проекта ndepend

2
ответ дан 13 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: