2011-08-13 12 views
2

私はF#Silverlight 4ユニットテスト(私はプロジェクトを追加してテンプレートをオンラインで検索した)のプロジェクトテンプレートを認識していないので、私はユニットテストを保持するために標準F#Silverlightライブラリプロジェクトを使用していますユニットテストプロジェクトファイル)。私はxUnit.net Contrib for Silverlightを使用しています。だからすべてがコンパイルされますが、テストを実行する方法はわかりません! TestDriven.NETは私の通常の単体テストプロジェクトでは動作しますが、このSilverlight単体テストプロジェクトでは動作しません。私は通常のxUnit GUIランナーを使用しようとしましたが、それはどちらも動作しません。何か案は?実行方法F#Silverlightライブラリプロジェクトを保持xUnit.net貢献ベースのユニットテスト?

更新

xUnit.netのcontrib人々は、スタンドアロンのコンソールランナーとしてStatlightを使用してお勧めします。 Copy Local = true(プロジェクトには必要ないがStatlightはあります)のテストプロジェクトにSystem.Xml.Linqを追加した後、テストアセンブリを指す実行可能ファイルをエラーなしで実行することができました。テスト。

私は試してテストを見つけることをたくさん試してみました。テストモジュールに明示的な名前空間を与えました。私は空白のないテストメソッド名を試しました。私はモジュールで関数の代わりにインスタンスメンバで型を試しました。私は明示的な--MethodsToTestフラグを試しました。何も動作しません。

これがStatlightまたはxUnit.net Contribに問題があるかどうかはわかりません。

私は、Silverlightプロジェクトで使用することができ、実際にはSilverlightの機能を使用していないプレーンライブラリをテストしようとしていることに注意してください(実際にはSilverlightの以前の経験はありません)。

アップデート2

私は(Silverlightのために構築されていないにもかかわらず、その「力」、それで)NuGetを通じて自分のプロジェクトに、通常のxUnitアセンブリを追加することができたし、その後Testdriven.NETを使用して成功したテストを実行。しかし、これが「不正行為」なのかどうかはわかりません。私のテストがまだ私のライブラリのSilverlight版に対してコンパイルされているからではないでしょうか?

アップデート3

私はまだ「合法的な」のxUnitソリューションを持つ任意の運を持っていなかったが、私はいくつかのNUnitのテストを実行するためにStatlightを取得することができました。ただし、クラスのインスタンスメソッドに対するテストだけを認識し、モジュールの機能に関するテストは認識しません(通常のプロジェクトではこれをうまく処理できます)。バマー。私はまだかかわらず、より良いものを探して、私の問題へのスーパーハックが、可能な解決策を考え出した4

アップデート(私はStatlightでissueを提出しました)。すべてのテストはモジュールで関数として書かれたXunitテスト(Silverlight以外のテストプロジェクトへのファイルリンク)ですが、Testlightを使ってテストを見つけることはできません。しかし、私はStatlightにNUnitテストを実行させることができました。このテストは、従来の方法で型のインスタンスメンバーとして記述されています。このようにして、アセンブリ内のすべてのXunitテストを検出して呼び出す、次の単一のNUnitテストを呼び出すことができました(つまり、1つの失敗テストを1つの時間としてしか見ることができませんが、うまくいきます)。

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プラグインであるAGUnitとnunitを組み合わせて使用​​していますが、dll only silverlightプロジェクトでは問題がありますが、xapファイルにすると動作します。

+0

ヒントありがとう - 私は灯台との門から問題がありますが、私はそれに取り組むつもりです。必要に応じて、私のテストをNUnitテストとして実行するには細かいことができるかもしれませんが、おそらくMSTestではなく、モジュール関数を私が信じるテストメソッドとしてサポートしていないためです(450テストが実用的でない変換することが望ましい)。私の「更新2」の考えは? –

+0

アップデート2に関して、私は不正行為に疑念を抱いています。テスト駆動は、機能ではない場合はSilverlightテストを実行してはならず、Silverlightベースライブラリに対して実行していないと思われます。私のユニットはメンバー構文でテストしますが、私はlet構文についても考えていませんでした。それは、おそらくF#compilierが作成しているものとマッチしていないことを見極めるために、statlightの問題である可能性がありますletと一緒に。 – jbtule

+0

十分に公正で、私は "正当な"解決策を試みるつもりです。私はそれがSilverlightベースライブラリに対して実行されていると思いますが、Silverlightランタイムとは違って、バイナリ互換性の問題ではなく、異なる特性を持つことができると思います。 –

関連する問題