2013-10-11 2 views
0

나는 watir을 처음 사용하고 assertion을 위해 testunit을 사용하고 있습니다. 내 스크립트는 다음과 같습니다. Script1 - Script2를 호출하는 테스트 메소드가 있습니다. Script2 - 모든 작업 및 유효성 검사를 수행합니다. 이것은 모두 단언했습니다.testunit에서 모든 어설 션을 집계하는 방법은 무엇입니까?

Script1을 실행해야만하는 테스트 케이스를 실행할 때 성공적으로 실행되지만 결과에 1 테스트, 0 어설 션, 0 실패, 0 오류, 0 건너 뛰기가 표시됩니다. 여기

내 코드입니다 :

이 내 첫 번째 파일

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 

에 그리고 이것은

으로 표시 보고서를 제외하고

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 

모든 것이 잘 작동 anotner 파일의 일부입니다

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

내 주장의 수는 어디입니까?

도움주세요.

+0

작동하지 않는 데에는 많은 이유가있을 수 있습니다. 코드를 공유하면보다 구체적인 답을 얻을 수 있습니다. –

+0

질문을 편집했습니다. 잠시만 기다려주십시오. – Pratik

답변

1

문제는 다른 클래스의 인스턴스 내에서 어설 션을 호출한다는 것입니다. 올바르게 호출하면, assert는 클래스 인스턴스 내에서 assertion count를 증가시킵니다. 따라서 귀하의 주장 수는 RubyTest 인스턴스가 아닌 귀하의 RubyDriver 인스턴스에서 증가합니다. 결과적으로 어설 션이보고되지 않습니다.

테스트/유닛에 의해 실행되는 실제 테스트 케이스 (즉, RubyTest의 test_method) 내에서 어설 션을 수행해야합니다.

예를 들어 RubyDriver가 운전 논리 및 테스트 할 값을 검색하는 로직을 포함하도록 만들 수 있습니다. RubyTest는 RubyDriver를 호출하여 값을 설정/가져오고 테스트 로직을 포함시킵니다.

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 

또 다른 해결책은 테스트 케이스 (RubyTest)를 RubyDriver로 전달하는 것일 수 있습니다. 그런 다음 RubyDriver가 RubyTest 인스턴스를 사용하여 어서션 메소드를 호출하게하십시오.

다음은 어설 션 횟수가 올바르게 업데이트 된 것을 볼 수있는 간단한 작업 예제입니다. RubyTest 인스턴스는 RubyDriver에 전달되고 @testcase 변수에 저장됩니다. 그런 다음 모든 테스트를 @testcase의 컨텍스트 (예 : @testcase.assert(false))로 실행하여 원래 테스트 케이스의 표명 수를 업데이트합니다. 당신은 또한 RubyDriver 실제 검사를하지 않는 한 조금 이상한 보이지만

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 

나는, 테스트 : : 단위 : : TestCase에의 하위 클래스로 RubyDriver을 떠났다.

+0

불행히도 제 경우에는 작동하지 않습니다. 내 프레임 워크는 내 테스트 메소드가 메소드를 호출 한 다음 모든 실행/유효성 검사가 거기에서 발생하는 방식으로 작성된다. – Pratik

+0

최소한의 변경만으로도 대체 접근법을 추가했다. 어쩌면 그것은 당신의 프레임 워크에 더 수용 될 것입니다. –

+0

감사합니다 저스틴. 이 작품 – Pratik