我希望Canopy网络测试结果能够在VS 2013测试资源管理器中显示...而且我很接近

时间:2014-07-07 19:18:14

标签: f# visual-studio-2013 test-explorer canopy-web-testing

我正在试图弄清楚如何让Canopy的测试结果显示在VS测试资源管理器中。我可以让我的测试出现,它会运行它们,但它总是显示通过。看起来Run()函数正在“吃掉”结果,所以VS永远不会看到失败。

我确信Canopy如何很好地解释它进入测试结果的异常之间存在冲突,因为通常你希望Run()无论结果如何都能成功并使用自己的报告报告其结果。

也许我应该重定向输出并在MS测试代码中解释它?

所以这就是我现在如何设置......

Visual Studio Test Runner查看此文件以查看其所见的测试,这些调用称为执行实际测试的树冠方法。

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

2 个答案:

答案 0 :(得分: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 infrasturcture成为&#34;报告&#34;所有测试和细节的摘要,所以我需要找到一种方法来重置&#34;冠层部分,以便我不必从冠层跟踪最后的已知状态然后进行比较。因此,为了实现这一目标,您的canopy套件只能进行一次测试,但我们希望在UnitTesting级别拥有尽可能多的测试。为了进行调整,我们在[]。

中执行以下操作
    runner.suites <- [new suite()]
    runner.failedCount <- 0
    runner.passedCount <- 0

当用户想要在树冠周围使用不同的单元测试基础设施时,在树冠内部可以调用或配置的东西可能是有意义的。

此外,我希望包含错误信息的输出在测试失败时正常显示,因此我在stringBuilder中捕获console.out并在[]中清除它。我通过包含下面的[]来设置它,其中common.results是我在然后在断言中使用的StringBuilder。

    System.Console.SetOut(new System.IO.StringWriter(common.results))

答案 1 :(得分:0)

创建一个可变类型以传递给'myTestModule.all'调用,该调用可以在失败时相应地更新,并在'run()'完成后声明。