Я хочу, чтобы результаты веб-тестирования Canopy отображались в обозревателе тестов VS 2013, и я ТАК БЛИЗКО

Я пытаюсь выяснить, как получить результаты теста 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

person Beth Whitezel    schedule 07.07.2014    source источник
comment
Вам удалось? Если да, то как вы это сделали? Как вы можете догадаться, меня также интересует интеграция с VS. :)   -  person Veksi    schedule 01.12.2014
comment
Да, смотрите ответ ниже   -  person Beth Whitezel    schedule 15.06.2016


Ответы (2)


У меня сейчас работает. Я помещаю ниже после 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 «отчитывалась» о сводке всех тестов и деталей, поэтому мне нужно было найти способ «сбросить» часть навеса, чтобы мне не приходилось отслеживать последнее известное состояние из навеса, а затем сравнивать. Итак, для того, чтобы это работало, ваш набор куполов может иметь только один тест, но мы хотим, чтобы их было столько, сколько мы хотим на уровне UnitTesting. Чтобы настроить это, мы делаем следующее в [].

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

Возможно, имеет смысл иметь что-то внутри canopy, что можно было бы вызывать или настраивать, когда пользователь хочет использовать другую инфраструктуру модульного тестирования вокруг canopy.

Кроме того, я хотел, чтобы выходные данные, содержащие информацию об ошибке, отображались, как обычно, когда тест завершается неудачно, поэтому я захватываю console.out в stringBuilder и очищаю его в []. Я настроил его, включив ниже [], где common.results — это StringBuilder, который я затем использую в утверждениях.

    System.Console.SetOut(new System.IO.StringWriter(common.results))
person Beth Whitezel    schedule 24.06.2015

Создайте изменяемый тип для передачи в вызов myTestModule.all, который может быть соответственно обновлен в случае сбоя и подтвержден после завершения run().

person Rumba    schedule 15.08.2014