2013-10-11 3 views
0

Je suis nouveau dans watir et j'utilise testunit pour l'assertion. Mon script ressemble à ceci: Script1 - a une méthode de test qui appelle Script2 Script2 - fait tout le travail et la validation. Ceci a toutes les assertionsComment agréger toutes les assertions dans testunit?

Quand je cours mon cas de test je dois exécuter Script1, il fonctionne avec succès mais le résultat montre 1 essais, 0 assertions, 0 échecs, 0 erreurs, 0 sauts.

Voici mon code:

Ceci est mon premier fichier

require_relative 'RubyDriver' 
require 'test/unit' 
class RubyTest < Test::Unit::TestCase 
def test_method 
    driver = RubyDriver.new("/home/pratik/study/UIAutomation/WatirScript.xlsx") 
    driver.call_driver 
end 
    end 

Et cela fait partie de anotner fichier

require_relative 'ExcelReader' 
require_relative 'RubyUtility' 
require "watir-webdriver" 
require 'test/unit' 

class RubyDriver < Test::Unit::TestCase 
def take_action 
value_property = @rubyutil.get_property("#{value}") 
if value_property 
    value_prop = value_property.first.strip 
    value_value = value_property.last.strip 
end 

case "#{@rubyutil.get_string_upcase("#{keyword}")}" 

when "VERIFY" 
    puts "verifying" 
    puts value_prop 
    puts value_value 
    object.wait_until_present 
    object.flash  
    if value_prop == "text" 
     assert_equal(object.text, value_value,"Text does not match") 
     # puts object.text.should == value_value 
    elsif value_prop == "exist" 
     value_boolean = value_value == "true" ? true : false 
     assert_equal(object.exists?,value_boolean,"Object does not exist") 
     # puts object.exists?.should == value_value 
    end 

Tout fonctionne bien, sauf rapport qui montre que

1 tests, 0 assertions, 0 failures, 0 errors, 0 skips. 

Où est mon nombre d'assertions.

Toute aide s'il vous plaît.

+0

Il y a probablement beaucoup de raisons pour lesquelles cela ne fonctionne pas. Si vous partagez votre code, cela nous aidera à donner des réponses plus concrètes. –

+0

Si vous avez édité la question, regardez s'il vous plaît – Pratik

Répondre

1

Le problème est que vous appelez vos assertions dans une instance d'une autre classe. Si je me souviens bien, assert incrémente le nombre d'assertions dans son instance de classe. Par conséquent votre nombre d'assertion est incrémenté dans votre instance RubyDriver plutôt que l'instance RubyTest. Par conséquent, aucune affirmation n'est signalée.

Vous devez faire les assertions dans le cas de test actuel (c'est-à-dire test_method de RubyTest) en cours de test/unité. Par exemple, vous pourriez faire en sorte que RubyDriver inclue votre logique de conduite et votre logique pour récupérer les valeurs à tester. RubyTest appelle ensuite RubyDriver pour configurer/obtenir des valeurs et inclure votre logique de test.

class RubyTest < Test::Unit::TestCase 
    def test_method 
    # Do some setup using RubyDriver instance 
    driver = RubyDriver.new("/home/pratik/study/UIAutomation/WatirScript.xlsx") 
    driver.call_driver 

    # Use RubyDriver to get some value you want to test 
    some_value_to_test = driver.get_value_to_test 

    # Do the assertion of the value within RubyTest 
    assert_equal(true, some_value_to_test, "Object does not exist") 
    end 
end 

Une solution alternative pourrait être de passer le cas de test (RubyTest) à RubyDriver. Ensuite, demandez à RubyDriver d'appeler les méthodes d'assertion à l'aide de l'instance RubyTest.

Voici un exemple de travail simplifié dans lequel vous pouvez voir que votre compte d'assertion est correctement mis à jour. Notez que l'instance RubyTest est transmise à RubyDriver et stockée dans la variable @testcase. Toutes les assertions sont ensuite exécutées avec le contexte de @testcase - par exemple @testcase.assert(false), ce qui garantit que les comptages d'assertions des cas de test d'origine sont mis à jour.

require 'test/unit' 

class RubyDriver < Test::Unit::TestCase 
    def initialize(file, testcase) 
     @testcase = testcase 
     super(file)  
    end 

    def action 
     @testcase.assert(false) 
    end 

end 

class RubyTest < Test::Unit::TestCase 
    def test_method 
     driver = RubyDriver.new("/home/pratik/study/UIAutomation/WatirScript.xlsx", self) 
     driver.action 
    end 
end 

J'ai quitté le RubyDriver comme une sous-classe de Test :: Unit :: TestCase, mais il semble un peu bizarre à moins que vous avez également des tests réels dans le RubyDriver.

+0

Malheureusement cela ne marchera pas dans mon cas. Mon framework est écrit de telle sorte que ma méthode de test doit simplement appeler une méthode et ensuite toute l'exécution/validation s'y passe – Pratik

+0

J'ai ajouté une approche alternative qui nécessite des changements minimes. Peut-être que ce sera plus acceptable pour votre cadre. –

+0

Merci Justin. Cela marche – Pratik

Questions connexes