F# 可变列表为空

F# 可变列表为空,f#,specflow,F#,Specflow,当我尝试运行下面的代码时,属性为null。为什么会这样?我给属性分配了一个空列表,但第一次通过循环时,它是空的 这会导致它删除我附加到它的第一个值。我也不明白。似乎一个连接了null的值应该是一个值列表 [<TechTalk.SpecFlow.Binding>] module FSharpLeftistHeapStepDefinition open TechTalk.SpecFlow let mutable properties = [0] let [<Given>]

当我尝试运行下面的代码时,属性为null。为什么会这样?我给属性分配了一个空列表,但第一次通过循环时,它是空的

这会导致它删除我附加到它的第一个值。我也不明白。似乎一个连接了null的值应该是一个值列表

[<TechTalk.SpecFlow.Binding>]
module FSharpLeftistHeapStepDefinition

open TechTalk.SpecFlow

let mutable properties = [0]
let [<Given>] ``I have a list with the following numbers``(values:Table) = 
    let rec insertItems i =
        if i < 0 then ()
        else 
            let value = int ((values.Rows.Item i).Item 0)            
            properties <- value::properties
            insertItems (i-1)

    insertItems (values.RowCount - 1)
[]
模块FSharpLeftistHeapStepDefinition
打开TechTalk.SpecFlow
让可变属性=[0]
让[]``我有一个包含以下数字的列表```(值:Table)=
让rec插入项目i=
如果i<0,则()
其他的
让value=int((values.Rows.Item i).Item 0)

属性我假设这个
[]
属性来自一个测试框架,这使我怀疑程序集是以一种非常规的方式由它加载的。初始值
[0]
由模块的静态构造函数设置,因此如果该构造函数不是由测试框架运行的,那么这将解释为什么它保持等于
null

避免TickSpec的任何特定原因?@RubenBartelink是TickSpec死了吗?两年内没有更新。@maslow我有一个版本,我展示了如何将它与xunit 2一起使用(我想并行运行)——我从未在TickSpec中发现过错误,它有1000行简单代码。SpecFlow OTOH没有提供我想要的好处,也没有像TickSpec那样与F#无缝集成。对我来说,选择SpecFlow比选择SpecFlow更容易(尽管F#中的原始xUnit在表现力方面非常接近,这是我们最终实际使用的)。我相信Phil对重新发行它持开放态度-例如,在fssf的控制下,但任何积极使用它的人也可以
 [<Binding>]
 type Example ()= 
     let mutable properties = []
     let [<Given>] ``I have a list with the following numbers``(values:Table) = 
         let rec insertItems i =
             if i < 0 then ()
             else 
                 let value = int ((values.Rows.Item i).Item 0)            
                 properties <- value::properties
                 insertItems (i-1)

         insertItems (values.RowCount - 1)