2016-10-26 4 views
5

Я использую VSCode и набор пакетов Ionide для создания консольного приложения в F #. Мне нужно добавить в приложение единичные тесты, чтобы при запуске проекта ctrl+shift+p FAKE: Build тесты выполнялись в процессе сборки.Добавление модульных тестов в проект F # в VSCode

В качестве примера я создал dummy project in Github.

Первоначально, test не было. Я создал директорию test, и в эту папку был создан второй проект TestProj.Test (в ретроспективе, я должен был использовать более описательные имена) для целей тестирования. Я добавил файл .fsproj от TestProj к этому проекту, чтобы я мог ссылаться на SimpleFunctions.fs. NUnit.Framework и FsUnit добавлены к TestProj.Test. Test.fs содержит два простых теста.

Я намеренно создал TestProj.Test как F # library, потому что я прочитал о том, что проект тестирования должен быть библиотекой, а не консольным приложением.

Я добавил строки 9, 31-37 и 47 по умолчанию build.fsx file that comes from Ionide.. Тем не менее, когда я строй всего проекта (т.е. TestProj), сборка не удается, и я получаю следующее сообщение об ошибке:

1) System.Exception: NUnit: cannot run tests (the assembly list is empty). 
    at Fake.NUnitSequential.NUnit(FSharpFunc`2 setParams, IEnumerable`1 assemblies) in C:\code\fake\src\app\FakeLib\UnitTest\NUnit\Sequential.fs:line 22 
    at [email protected](Unit _arg3) 
    at Fake.TargetHelper.runSingleTarget(TargetTemplate`1 target) in C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 492 

Line 22 of the Sequential.fsassemblies предполагает, что пуст.

Что я делаю неправильно? Как мне настроить файл build.fsx, чтобы тесты в TestProj.test успешно выполнялись? В качестве альтернативы, есть что-то не так с файлом Tests.fs в TestProj.Test? Это кажется особенно сложным; есть ли более простой способ включить тесты, которые запускаются автоматически с VSCode, Iondide и F#?

+0

Ваша цель «Тест» ищет «NUnit.Test. *. Dll», тогда как «TestProj.Test» создает именную DLL. Кстати, есть несколько других возможных улучшений для вашей структуры проекта. Если вы хотите, я бы поднял PR от EOD WEST. – CaringDev

+1

Для создания полноценного проекта F #, включая документацию, вы можете посмотреть на [ProjectScaffold] (https://fsprojects.github.io/ProjectScaffold/) – CaringDev

+0

Раньше я использовал ProjectScaffold, но было так много вещей, что я не нужны или не понимают. Я надеялся избежать этого, но может прибегнуть к тому, чтобы использовать его, если я не могу самостоятельно создать тестовую структуру. Кроме того, возможно, это слишком рано в мой день, но я не понимаю аббревиатуры «PR», «EOD» и «WEST», поскольку вы использовали их здесь. Объяснение пожалуйста? – Steven

ответ

2

Есть несколько вопросов, в вашем проекте:

  • пытается проверить, прежде чем строить "Clean" ==> "Test" ==> "Build" ==> "Deploy"
    => целевые изменения зависимостей в "Clean" ==> "Build" ==> "Test" ==> "Deploy"

  • отдельной конфигурации PAKET для испытания (paket.dependencies, Paket.блокировка в test вложенной), что приводит к противоречивым версиям ссылочных зависимостей
    => удалить paket.dependencies и paket.lock из test

  • ядовитой смеси из версий NUnit
    => удалить явные ссылки на NUnit.Framework из paket.dependencies и запустить paket.exe install

  • Недопустимое расширение типа в тестовом проекте
    => изменить на type Test() или удалить бесполезный файл

  • здание создает выход всех проектов (а не только src/app) в ./build но тесты ищут библиотек DLL в ./test
    => изменение тестового файла шаблон для buildDir + "**/*.Test.dll"

  • , если вы хотите использовать NUnit3
    =>open Fake.Testing и использовать NUnit3 вместо NUnit

наконец, вы должны commit paket.bootstrapper.exe

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

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