2009-09-23 12 views
14

F#で単体テストを作成するにはどうすればよいですか?私は通常、[TestClass]と[TestMethod]属性を持つVisual StudioのUnitTest部分を使用し、テストビューを使用してこれらを実行します。私はスクリプトファイルを作成して実行することができますが、現在処理されている方法が好きです。F#で単体テストを扱うには?

+0

[この最近の記事](http://fsharpnews.blogspot.com/2011/01/testing-behaviour-driven-development.html)では、これ以上のことが説明されています(F#からのBDDテスト)。 –

+0

ここから始めることができます:http://bit.ly/1JhEbA7 –

答えて

9

を試してみて、それがOO xUnitスタイルのテストよりも自然な感じ。

EDIT 2014:FsUnit/FsTestは、ほとんど役に立たない構文砂糖であると考えます。そして "OOよりも自然な"という意味は絶対に何も意味しません。数ヶ月前、私は現在、hereのテストに関する私の考えを書きました(スレッド全体を読むことをお勧めします)。

10

チェックアウトfscheck。ハスケルのクイックチェックのポートです。 Fscheckでは、関数が満たさなければならないプロパティを指定し、「多数のランダムに生成されたケース」に対して検証します。

これは、C#のような必須言語では簡単にはできないことです。

+0

Pexを見てください:http://research.microsoft.com/en-us/projects/Pex/ –

+0

@Mauricio:私はそれが可能であることに同意しますOO設定(別の例:RANDOOP)でFsCheckが(ランダムにテストケースを生成する)何をするかを指定します。ある日、私たちは無作為に生成されたケースとPexのようなケースを生成することができる1つの仕様言語(私の非常に偏った意見では、機能的設定でははるかに良く見える)を持つことになるでしょう。 –

+0

FsCheckはC#インターフェイスを備えているので、C#でもFsCheckの最も重要な機能を使用できます。 –

1

、私はむしろ、F#でテストを書くことFsUnitまたはFsTestを使用したいXUnit.net

+0

合意。 (のみ?)xUnit.NETは静的メソッドでテストケースを実行できます。したがって、使用する.NETコンポーネントのテストフレームワークのメインストリームに滞在したい場合に使用します。 –

+0

MbUnitもこれを行うことができます –

1

バージョン2.5から、NUnitではstatic members as testsを使用できます。また、クラスレベルのTestFixtureAttributeはonly necessary for generic or classes with non-default constructorsです。 NUnitにはbackward-compatible conventionがあり、TestAttributeを使用する代わりにテストメンバーが "test"という単語で始まるので、NUnit> 2.5の慣用的なF#を書くことができます。

更新 あなたはCashel libraryにTestFixtureAttributeせずにいくつかのテストの例を見ることができます。私はTestAttributeを使用し続けました。テストランナーがいないときにテストを正しく受け取り、NUnitポストの一部が間違っているか、少なくとも誤解を招く可能性があるからです。

+0

Ryan、F#のサンプルテストで詳しく説明しますか?または、TestAttributeまたはTestFixtureAtrributeなしでF#単体テストを表示するサイトへのリンク? –

+0

@David Cashelのテストへのリンクを追加しました。 –

2

NaturalSpecを試してみるとよいでしょう。 NUnitの上にあるF#UnitTest-Frameworkです。

3

私は(Visual Studioのアドインのテストを実行するため、「学生、オープンソース開発者およびトライアルユーザー」のための無料)xUnit.netTestDriven.Netの組み合わせを使用し、私自身のオープンソースUnquoteライブラリを(もNUnitのと連動しているとその他の例外ベースのアサーションフレームワーク)。任意の場所に解凍し、

  1. をダウンロードしてインストールしTestDriven.Net
  2. ダウンロードxUnit.netとTestDriven.Net
  3. と統合するxunit.installer.exeを実行します。これは素晴らしい出て働いており、入門本当に簡単です。 UNQUOTEは、任意の場所
  4. に解凍
  5. ダウンロードは、あなたのユニットテストプロジェクトに(解凍したダウンロードから)
  6. がxunit.dllへの参照を追加しテストしUnquote.dllユニットのためのソリューション内のプロジェクトを作成します
  7. 次は、xUnit.net/Unquoteスタイルの単体テストを含む単体テストプロジェクトの.fsファイルの簡単な例です。

    module Tests 
    open Swensen.Unquote 
    open Xunit 
    
    [<Fact>] 
    let ``description of first unit test``() = 
        test <@ (11 + 3)/2 = String.length ("hello world".Substring(4, 5)) @> 
    
    [<Fact>] 
    let ``description of second unit test``() = 
        let x = List.rev [1;2;3;4] 
        x =? [4;3;1;2] 
    
  8. 実行ソリューションエクスプローラでプロジェクトを右クリックし、Runテスト(複数可)を選択することによって、プロジェクトのすべてのユニットテスト。あなたは以下を使用することができますVS2013で

    ------ Test started: Assembly: Tests.dll ------ 
    
    Test 'Tests.description of second unit test' failed: 
    
    [4; 3; 2; 1] = [4; 3; 1; 2] 
    false 
    
        C:\Solution\Project\Tests.fs(12,0): at Tests.description of second unit test() 
    
    Test 'Tests.description of first unit test' failed: 
    
    (11 + 3)/2 = String.length ("hello world".Substring(4, 5)) 
    14/2 = String.length "o wor" 
    7 = 5 
    false 
    
        C:\Solution\Project\Tests.fs(7,0): at Tests.description of first unit test() 
    
    0 passed, 2 failed, 0 skipped, took 1.09 seconds (xUnit.net 1.7.0 build 1540). 
    
7

:前の例のテストは、Visual Studioの[出力]ウィンドウに印刷され、次で失敗するの両方。

open Microsoft.VisualStudio.TestTools.UnitTesting 
[<TestClass>] 
type testrun() = 
    [<TestInitialize>] 
    member x.setup() = 
     //your setup code 

    [<TestMethod>] 
    member x.yourTestName() = 
     //your test code 

ヒント:UIユニットのテストをお探しの場合は、Canopyでこの設定を使用できます。

+1

これは受け入れられる回答である必要があります。これは組み込みのユニットテスト機能を使用します。さらに、このアプローチでは、Microsoft.VisualStudio.QualityTools.UnitTestFramework.dllへの参照を追加する必要があります(明らかにそうではありません)。 – wizulus

+0

@alancnetこれはVisual Studioを使用している場合にのみ組み込まれています。 – Yawar

関連する問題