Даже если вы просто добавить fsx
скрипт для Visual Studio, вы можете скомпилировать setup.fsx
в нормальный проект вместе с другие (возможно, fs
) файлы, поэтому вы должны иметь возможность сохранить сценарий как обычный файл сценария в Visual Studio и в то же время ссылаться на него из проекта или из инструмента командной строки, который создает ваши тесты.
Я попытался сделать это с помощью следующего test.fsx
файла:
module Demo
#r "System.Xml.Linq.dll"
open System.Xml.Linq
let test() =
let d = XDocument(XElement(XName.Get("foo")))
d.ToString()
Вы, безусловно, необходимо некоторое module Name
заявление в начале (так что вы можете получить доступ к функциям из других файлов), но в противном случае она может быть любой fsx
файл , Другой файл, который я использовал test.fs
:
module Main
open Demo
test() |> printfn "%A"
Это только для тестирования, но здесь вы можете написать модульные тесты. При компиляции файлов с помощью следующей команды, вы получите стандартную сборку, вы могли бы перейти на XUnit (примечание, компилятор может выбрать #r
тег test.fsx
, мы не должны писать ссылки в явном виде):
fsc.exe --target:library test.fsx test.fs
Я думаю, что вы можете получить такую же конфигурацию в Visual Studio, если вы добавите проект библиотеки, а затем вручную добавите ссылку на файл (который может указывать на файл в другом месте структуры вашего решения), используя что-то вроде этого в файле fsproj
:
<Compile Include="..\Eslewhere\In\Your\Project\Tree\File.fsx">
<Link>File.fsx</Link>
</Compile>
Обратите внимание, что при добавлении fsx
, используя «Добавить элемент», он помечен как «Включить», но не как «Компиляция», поэтому он не компилируется как часть проекта. Вышеупомянутое должно включать его в проект, и оно должно сообщить компилятору также включить его в сборку сборки.
Предупреждение:, который сказал, я думаю, было бы лучше проверить только скомпилированные файлы dll
с использованием стандартных модульных тестов. Если вы хотите проверить файлы fsx
, я бы просто добавил пару строк в качестве тестов в конце и запустил их вручную (выберите, Alt
+ Enter
). Причина в том, что файлы fsx
должны быть изменены довольно часто, и поэтому слишком тщательное тестирование может ограничить вашу гибкость. С другой стороны, когда код становится более прочным, имеет смысл переместить его в файл dll
.
Если вы пишете модуль сверху в fsx, вы не можете выполнить его в fsi. добавление #if COMPILED модуль Demo #endif кажется ok – nicolas
У вас есть доступ к пространству имен Demo, когда он определен в файле fsx? Я получаю сообщение об ошибке. файл fsx находится выше в списке проектов .. ошибка исчезает при переименовании в fs, появляется переход обратно в fsx – nicolas
@nicolas Я только пытался запустить компилятор вручную из командной строки. Я думаю, что это будет работать только в том случае, если файл 'fsx' помечается как Compile - что такое команда командной строки, которую Visual Studio печатает в окне« Output »? Вы видите файл 'fsx' therE? –