如何运行F#Silverlight Library项目,持有xUnit.net基于Contrib的单元测试?

时间:2011-08-13 21:00:36

标签: silverlight unit-testing f# xunit.net xunit

我不知道F#Silverlight 4单元测试的任何项目模板(我通过Add Project搜索了Online的模板),所以我使用标准的F#Silverlight Library项目来保存我的单元测试(这只是文件链接到主单元测试项目文件)。我正在使用xUnit.net Contrib for Silverlight。所以一切都编译但我不知道如何运行测试! TestDriven.NET适用于我的正常单元测试项目,但不适用于Silverlight单元测试项目。我尝试使用普通的xUnit GUI运行器,但这也不起作用。有什么想法吗?

更新

xUnit.net Contrib人员建议使用Statlight作为独立的控制台运行程序。将System.Xml.Linq添加到我的测试项目后,Copy Local = true(我的项目不需要它,但是Statlight没有)我能够运行指向我的测试程序集的可执行文件,没有任何错误,除了它无法找到任何试验。

我尝试了许多尝试并允许找到测试。我给我的测试模块提供了明确的命名空间。我尝试了没有空格的测试方法名称。我尝试使用实例成员而不是模块中的函数。我甚至试过了明确的--MethodsToTest标志。什么都行不通。

我不确定这是否会成为Statlight或xUnit.net Contrib的问题。

请注意,我只是试图测试一个可以被Silverlight项目使用的普通库,并且实际上并没有使用任何Silverlight功能(事实上,我之前没有任何Silverlight经验!)。

更新2

我能够通过NuGet将正常的xunit程序集添加到我的项目中(尽管没有为Silverlight构建,但“强制”它)然后使用Testdriven.NET成功运行测试。但我不确定这是否“作弊”。也许不是因为我的测试仍然针对我的库的Silverlight版本进行编译......?

更新3

虽然我仍然没有运行“合法”的xunit解决方案,但我能够让Statlight运行一些NUnit测试。除了它只识别对类的实例方法的测试,它不识别对模块函数的测试(虽然它可以在正常项目中处理这些正常)。游民。 (我使用Statlight提交了issue

更新4

我已经找到了一个超级hacky但可行的解决方案来解决我的问题,但仍然在寻找更好的东西。我的所有测试都是作为模块中的函数编写的Xunit测试(非Silverlight测试项目的文件链接),但是我无法让Statlight找到任何测试。但是,我能够让Statlight运行NUnit测试,这些测试以传统方式编写为类型的实例成员。因此,我能够启动以下单个NUnit测试,该测试在程序集中查找所有Xunit测试并调用它们(因此我只能看到一个失败的测试作为时间,但除此之外它确实运行良好):

namespace SilverlightTesting

open Xunit
open NUnit.Framework

[<TestFixture>]
type TestRunner() =
    let isFact (attr:obj) =
        match attr with
        | :? Xunit.FactAttribute as attr when attr.Skip = null -> true
        | _ -> false

    [<Test>]
    member this.Run () =
        let assm = System.Reflection.Assembly.GetExecutingAssembly()
        let tys = assm.GetTypes()
        let mutable count = 0
        for ty in tys do
            let methods = ty.GetMethods()
            for mi in methods do
                let attrs = mi.GetCustomAttributes(false)
                if attrs |> Array.exists isFact then
                    printf "running test `%s`..." mi.Name
                    mi.Invoke(null,null) |> ignore
                    printfn "passed"
                    count <- count + 1
        printfn "All %i tests passed." count

1 个答案:

答案 0 :(得分:1)

我过去曾成功使用lighthouse,但我不知道它是否适用于xUnit我将它与mstest一起使用。目前正在与AGUnit合作,这是基于statlight的resharper插件与nunit相结合,虽然它对dll only silverlight项目有困难 - 如果你把它变成一个xap文件,它们就可以工作。