2011-08-13 59 views
2

我不知道任何項目模板的F#Silverlight 4單元測試(我通過添加項目在線搜索模板),所以我使用標準的F#Silverlight庫項目來保存我的單元測試(這只是文件鏈接到主單元測試項目文件)。我正在使用xUnit.net Contrib for Silverlight。所以一切都編譯好了,但我不知道如何運行測試! TestDriven.NET適用於我的正常單元測試項目,但不適用於此Silverlight單元測試項目。我試圖使用普通的xUnit GUI runner,但這也不起作用。有任何想法嗎?如何運行F#Silverlight庫項目控股xUnit.net基於Contrib的單元測試?

更新

的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

我已經想通了一個超級哈克,但可行的解決我的問題,還在尋找更好的東西,雖然。我所有的測試都是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

我以前用過lighthouse成功,但是我不知道它是否可以和xUnit一起使用,我用它與mstest一起使用。目前正在與基於statlight的resharper插件與nunit結合使用的AGUnit一起工作,雖然它在dll only silverlight項目中遇到了困難 - 如果您將它們製作成xap文件,它們將起作用。

+0

感謝您的提示 - 我有困難走出燈塔的大門,但我會繼續努力。如果需要,我可能會做一些欺騙來運行我的測試作爲NUnit測試,但可能不是MSTest,因爲它不支持模塊功能作爲我認爲的測試方法(並且我有〜450測試是不實際的或者可取的轉換)。對我的「更新2」有什麼想法? –

+0

關於更新2,我對作弊行爲持懷疑態度,在我看來,測試驅動不應該運行silverlight測試,如果這不是功能,並且它不是針對silverlight基礎庫運行的。另外我的單元測試了成員語法,我甚至沒有考慮let語法,這可能是statlight的問題,你有它的反射來找到測試可能不匹配F#compilier正在做什麼與讓。 – jbtule

+0

夠公平的,我會繼續嘗試一種「合法的」解決方案。我認爲它是針對Silverlight基本庫運行的,但不是針對我認爲可能具有不同特性的Silverlight運行時,而不僅僅是二進制兼容性問題。 –

相關問題