Свойства скидывают xUnit и Test Explorer

Я пытаюсь понять, как настроить и использовать FsCheck, прочитав следующее сообщение в блоге:

http://www.clear-lines.com/blog/post/FsCheck-2b-XUnit-3d-The-Bomb.aspx

Я изо всех сил старался имитировать весь процесс в посте, и все работает нормально, пока не появится следующий фрагмент кода:

namespace FSharpTests

open Xunit
open FsCheck
open FsCheck.Xunit
open CSharpCode

module Specification =

[<Property>]
let ``square should be positive`` (x:float) =
x * x > 0.

Согласно изображению в сообщении блога, это должно привести к одному провалу теста в обозревателе тестов. Однако в моем случае я получаю следующее:

Ничего

Я пробовал немного повозиться с кодом, и кажется, что виноват атрибут [<Property>].

Следующий фрагмент кода, который содержит часть предыдущего кода из сообщения в блоге, будет работать нормально, если указанный атрибут не закомментирован, производя два проходящих теста, но в противном случае ничего не выдаст (см. Изображение выше).

namespace FSharpTests

open Xunit
open FsCheck
open FsCheck.Xunit
open CSharpCode

module Specification =

    [<Fact>]
    let ``length above 8 should be valid`` () =
        let password = "12345678"
        let validator = Validator ()
        Assert.True(validator.IsValid(password))

    [<Fact>]
    let ``length under 8 should not be valid`` () =
        let password = "1234567"
        let validator = Validator ()
        Assert.False(validator.IsValid(password))

    //[<Property>]
    let ``square should be positive`` (x:float) =
        x * x > 0.

Я делаю что-то неправильно? Чего-то не хватает?

Я сейчас бегаю ...

  • Visual Studio Ultimate 2012, версия 11.0.61030.00, обновление 4
  • F # 3.0 (я думаю ..? Как мне это точно проверить?)
  • FsCheck 0.9.4.0
  • FsCheck.Xunit 0.4.1.0
  • xUnit.net 1.9.2
  • xUnit.net runner для Visual Studio 0.99.7

Обновить

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

В описании сказано:

Found conflicts between different versions of the same dependent assembly.

Перейдя к источнику предупреждения, в редакторе открывает Microsoft.Common.targets, показывая мне тысячи строк непонятного XML и 101 дальнейшее предупреждение.

Если я удалю пакеты FsCheck и закрою файл Microsoft.Common.targets, все предупреждения исчезнут. Я предполагаю, что это предупреждение может быть ключом к разгадке того, почему что-то работает не так, как ожидалось, но я все еще не знаю, как это решить.


person phaz    schedule 08.07.2014    source источник
comment
Установили ли вы пакет xunit runner в Visual Studio? Все остальное в порядке   -  person Ruben Bartelink    schedule 09.07.2014
comment
Ага. Бегунок установлен. :-)   -  person phaz    schedule 09.07.2014
comment
Ах, не очень хорошо прочитал Q - вы довольно хорошо исключили эти возможности, так что все сводится к сбою / зависанию во время обнаружения. Что отображается в окне вывода (выбор тестов в раскрывающемся списке)? Как насчет подключения отладчика к процессу vstest.discovery * и перехвата исключений?   -  person Ruben Bartelink    schedule 09.07.2014
comment
Какую версию Visual Studio, F #, FsCheck и FsCheck.Xunit вы используете? Я пробовал использовать этот точный код с последними пакетами xunit runner и FsCheck в VS2013, и это сработало.   -  person Kurt Schelfthout    schedule 09.07.2014
comment
(Дополнение к мнению Курта) Возможно, отсутствуют перенаправления привязки (в app.config) из-за несоответствий в игре? (Add-BindingRedirect в окне консоли диспетчера пакетов). (И это, вероятно, не применяется в этом случае, но любые такие изменения app.config не могут быть приняты без перезапуска)   -  person Ruben Bartelink    schedule 09.07.2014
comment
Привет, народ. Спасибо за комментарии. Я обновил свой пост, добавив больше информации. Пожалуйста, взгляните. :-)   -  person phaz    schedule 10.07.2014
comment
@KurtSchelfthout Теперь я установил VS2013 и попробовал его там, где он работает безупречно. Итак, похоже, проблема ограничена VS2012. : -S   -  person phaz    schedule 10.07.2014
comment
Да, в этом есть смысл. FsCheck построен на F # 3.1, VS2012 afaik использует F # 3.0. Вы можете попробовать изменить BindingRedirects в файле app.config для перенаправления на 4.3.0.0, возможно, NuGet поступит правильно, как предлагает @RubenBartelink, но я не уверен.   -  person Kurt Schelfthout    schedule 11.07.2014
comment
У него уже есть ‹bindingRedirect oldVersion = 0.0.0.0-4.3.0.0 newVersion = 4.3.0.0 /›, однако изменение его на ‹bindingRedirect oldVersion = 0.0.0.0-4.3.0.0 newVersion = 4.3.1.0 /› и перезапуск VS2012, кажется заставить вещи работать. Однако предупреждение все еще присутствует. Стоит ли мне беспокоиться об этом?   -  person phaz    schedule 12.07.2014
comment
Я нашел другой подход, который, кажется, тоже работает нормально. Я удалил текущие пакеты FsCheck и FsCheck.Xunit, а затем добавил FsCheck 0.9.3, которая является последней версией перед переходом на F # 3.1, за которой следует FsCheck.Xunit. Теперь предупреждений нет, и тесты показывают нормально. Согласно их примечаниям к выпуску, единственное, чего мне сейчас не хватает, - это усиление защиты других генераторов от нового генератора строк, генерирующих нуль. Мне любопытно, почему они внезапно решили переключиться на F # 3.1. : -S   -  person phaz    schedule 12.07.2014
comment
Я, конечно же, перехожу на последние версии компилятора F # и версии FSharp.Core. Это не вопрос выбора самой младшей версии, которая работает; каждая версия так же несовместима (для системы сборки и загрузки) друг с другом. Например. если бы FsCheck был на F # 3.0, люди, которые хотели использовать F # 3.1, столкнулись бы с той же проблемой, что и вы.   -  person Kurt Schelfthout    schedule 04.09.2014
comment
Ха ... Я не могу вспомнить, является ли FsCheck открытым исходным кодом, и если да, то можно ли будет получить и скомпилировать исходный код, например, F # 3.0 (конечно, учитывая, что он не использует специфические особенности версии)?   -  person phaz    schedule 04.09.2014


Ответы (1)


Похоже, что тестовое обнаружение не выполняется без уведомления, если перенаправления привязки не установлены должным образом. Это стоило мне около 3 часов, поэтому я чувствую боль. Просто добавьте App.config файл в свой тестовый проект с соответствующими перенаправлениями. Мне тоже пришлось перенаправить FSharp.Core вот так: https://github.com/fscheck/FsCheck/issues/151

person Cameron Taggart    schedule 15.09.2015