2014-07-07 8 views
8

Próbuję dowiedzieć się, jak uzyskać wyniki testu dla Canopy, aby pokazać w eksploratorze testu VS. Mogę sprawić, że moje testy się pokażą, a on je uruchomi, ale zawsze pokazuje przepustkę. Wydaje się, że funkcja Run() "je" wyniki, więc VS nigdy nie widzi awarii.Chcę, aby wyniki testów sieci Web Canopy były wyświetlane w eksploratorze testowym VS 2013 ... i jestem TAK ZAMKNIJ

Jestem pewien, że jest to konflikt między tym, jak Canopy dobrze interpretuje wyjątki, które dostaje w wynikach testów, ponieważ normalnie chciałbyś, aby Run() odniósł sukces niezależnie od wyniku i raportował wyniki za pomocą własnych raportów.

Może powinienem przekierować wyjście i zinterpretować to w kodzie testowania MS?

Więc tutaj jest jak mam to skonfigurować teraz ...

Visual Studio testu Runner patrzy na ten plik za to, co widzi jako testy te wywołać metody baldachim, które wykonują prawdziwe testy.

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 wygląda

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 
+1

Udało ci się? Jeśli tak, jak to zrobiłeś? Jak można się domyślić, interesuje mnie również integracja VS. :) – Veksi

+0

Tak, zobacz odpowiedź poniżej –

Odpowiedz

6

Mam to teraz działa. Podam poniżej po przebiegu() dla każdego testu.

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

więc teraz moich testów wyglądać mniej więcej tak:

[<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()) 

baldachimem i infrastruktury test jednostkowy jakieś zachodzenie w co chcą zająć. Chcę, żeby infrasturktura UnitTesting była tym, co "raportowało" podsumowanie wszystkich testów i szczegółów, więc musiałem znaleźć sposób na "zresetowanie" części czaszy, tak, że nie musiałem śledzić ostatniego znanego stanu z czaszy, a następnie porównać. Aby to zadziałało, Twój pakiet może mieć tylko jeden test, ale chcemy mieć tyle, ile chcemy na poziomie UnitTesting. Aby to zmienić, wykonaj poniższe czynności w [].

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

To może mieć sens, aby mieć coś wewnątrz czaszy, które można by nazwać lub skonfigurowanym, gdy użytkownik chce użyć innej infrastruktury jednostki badań wokół baldachimu.

Dodatkowo chciałem, aby dane wyjściowe zawierające informacje o błędzie pojawiały się tak jak zwykle, gdy test się nie powiedzie, więc przechwytuję plik console.out w stringBuilder i usuwam go w []. Włączyłem go, włączając poniżej [], gdzie common.results jest StringBuilder, którego używam w wersjach.

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

Utwórz typ zmienny, aby przejść do rozmowy „myTestModule.all”, które mogą być aktualizowane odpowiednio w przypadku awarii i zapewnił po po "run() kończy.

Powiązane problemy