Я изо всех сил пытался адаптировать свой стандартный подход к тестированию кода .NET на Ruby.
В качестве примера я пишу класс, который:
grab all *.markdown files from a directory
foreach file:
extract code samples from file
save code to file.cs in output directory
Обычно для .NET я получаю что-то вроде:
class ExamplesToCode {
public ExamplesToCode(IFileFinder finder, IExampleToCodeConverter converter) { ... }
public void Convert(string exampleDir, string targetDir) { ... }
}
В моем тесте (написанном первым) я имитировал поисковик и конвертер. Затем я бы вырезал finder.FindFiles ("*. Markdown")
, чтобы вернуть, скажем, ["file1", "file2"]
, и проверить converter.Convert ( "file1", targetDir)
и convert.Convert ("file2", targetDir)
был вызван.
Я не могу применить это к Ruby из-за того, что Ruby имеет тенденцию использовать блоки и внутренние итераторы (например, array.each {| x | put x}
), а также включать модули вместо внедрения конструктора. Я не уверен, как выполнить модульное тестирование кода в таких случаях (без настройки полного интеграционного теста), а подход .NET кажется невероятно нерубиновым; похоже, это противоречит тому, как естественно работает Ruby.
Есть предложения, как это сделать с помощью Ruby? Хорошим примером будет Ruby-тест для этого примера.