9

Canopy のテスト結果を VS テスト エクスプローラーに表示する方法を見つけようとしています。テストを表示して実行できますが、常にパスが表示されます。Run() 関数が結果を「食べている」ように見えるので、VS は決して失敗しません。

通常、結果に関係なく Run() を成功させ、独自のレポートを使用して結果を報告する必要があるため、Canopy がテスト結果に含まれる例外を適切に解釈する方法との間に矛盾があると確信しています。

おそらく、出力をリダイレクトして、MS テスト コードでそれを解釈する必要がありますか?

というわけで、今の設定方法は…

Visual Studio Test Runner は、このファイルを参照してテストと見なすものを探します。これらは、実際のテストを行う canopy メソッドを呼び出します。

open canopy
open runner
open System
open Microsoft.VisualStudio.TestTools.UnitTesting

[<TestClass>]
type testrun() = 

    // Look in the output directory for the web drivers    
    [<ClassInitialize>]
    static member public setup(context : TestContext) =
        // Look in the output directory for the web drivers    
        canopy.configuration.ieDir <- "."
        canopy.configuration.chromeDir <- "."

        // start an instance of the browser
        start ie
        ()

    [<TestMethod>]
    member x.LocationNoteTest() =
        let myTestModule = new myTestModule()
        myTestModule.all()
        run()


    [<ClassCleanup>]
    static member public cleanUpAfterTesting() =
        quit() 
        ()

myTestModule は次のようになります

open canopy
open runner
open System

type myTestModule() =

    // some helper methods

    member x.basicCreate() =
        context "The meat of my tests"

        "Test1" &&& fun _ ->
            // some canopy test statements like...
            url "http://theURL.com/"

            "#title" == "The title of my page"

            //Does the text of the button match expectations?
            "#addLocation" == "LOCATION"

            // add a location note
            click ".btn-Location"

     member x.all() = 
        x.basicCreate()
        // I could add additional tests here or I could decide to call them individually
4

2 に答える 2

6

私は今それを働いています。各テストの run() の後に以下を配置します。

    Assert.IsTrue(canopy.runner.failedCount = 0,results.ToString())

だから今私のテストは次のようになります:

    [<TestMethod>]
    member x.LocationNoteTest() =
            let locationTests = new LocationNote()

            // Add the test to the canopy suite
            // Note, this just defines the tests to run, the canopy portion
            // of the tests do not actually execute until run is called.
            locationTests.all()

            // Tell canopy to run all the tests in the suites.
            run()

            Assert.IsTrue(canopy.runner.failedCount = 0,results.ToString())

Canopy と UnitTesting インフラストラクチャは、処理したい点が重複しています。UnitTesting インフラストラクチャをすべてのテストと詳細の概要を「報告」するものにしたいので、キャノピーから最後の既知の状態を追跡する必要がないように、キャノピー部分を「リセット」する方法を見つける必要がありました。比較。したがって、これが機能するためには、canopy スイートは 1 つのテストしか持つことができませんが、UnitTesting レベルでは必要な数だけ持つ必要があります。それを調整するために、[] で以下を行います。

    runner.suites <- [new suite()]
    runner.failedCount <- 0
    runner.passedCount <- 0

ユーザーがキャノピーの周りで別の単体テスト インフラストラクチャを使用したい場合に、キャノピー内に何かを呼び出したり構成したりすることは理にかなっているかもしれません。

さらに、エラー情報を含む出力が、テストが失敗したときに通常どおり表示されるようにしたかったので、console.out を stringBuilder でキャプチャし、[] でクリアします。以下の [] を含めてセットアップしました。ここで、common.results は、アサートで使用する StringBuilder です。

    System.Console.SetOut(new System.IO.StringWriter(common.results))
于 2015-06-24T16:31:48.333 に答える
0

'myTestModule.all' 呼び出しに渡す変更可能な型を作成します。これは、失敗時に適宜更新され、'run()' の完了後にアサートされます。

于 2014-08-15T12:21:58.990 に答える