2015-09-07 6 views
5

Methode 1: -Wie Behauptung zählt in Testeinheit berechnet werden

test.rb

class Test < Test::Unit::TestCase 
    def test_sample 
    assert_true(test) 
    assert_equal(a,b) 
    end 
end 

Ergebnis: - Finished in 38,329532529 Sekunden.

1 tests, 2 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 
100% passed 

Methode 2: -

test.rb

class Test < Test::Unit::TestCase 
require 'helper' 
include AssertionHelper 
    def test_sample 
    test_assertion 
    end 
end 

helper.rb

include Test::Unit::Assertions 
module AssertionHelper 
    def test_assertion 
    assert_true(test) 
    assert_equal(a,b) 
    end 
end 

Ergebnis: -

Finished in 38.329532529 seconds. 

1 tests, 2 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 
100% passed 

Methode 3: -

test.rb

class Test < Test::Unit::TestCase 
require 'helper' 
    def test_sample 
    AssertionHelper.test_assertion() 
    end 
end 

helper.rb

include Test::Unit::Assertions 
    module AssertionHelper 
     def self.test_assertion 
     assert_true(test) 
     assert_equal(a,b) 
     end 
    end 

Ergebnis: -

Finished in 38.329532529 seconds. 

1 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 
100% passed 

Bei Verwendung von Methode 3, erhalte ich als Behauptung zählen "0" statt "2".

Ist es mir möglich, Assertion Count als 2 mit Methode 2 zu erhalten?

+0

warum Behauptung in ein separates Modul wickeln ? – Anatoly

+0

@Anatoly Ich habe gemeinsame Behauptungen, die für mehr Testdateien verifiziert werden müssen. Also habe ich häufige Behauptungen in eine Hilfsdatei geschrieben und diese von Testdateien aufgerufen. – karan

+0

test_helper.rb ist für allgemeine Funktionen, aber ** Assertions ** müssen in Tests sein – Anatoly

Antwort

1

können Sie übergeben Ihrem aktuellen TestCase zu Ihrem Modul, wie folgt aus:

sample_test.rb:

require 'test-unit' 
require 'helper' 

def a; true ; end 
def b; true ; end 
def test; true ; end 

class SampleTest < Test::Unit::TestCase 
    def test_sample 
     AssertionHelper.my_assertion(self) 
    end 
end 

helper.rb:

module AssertionHelper 
    def self.my_assertion(test_case) 
     test_case.instance_exec do 
     assert_true(test) 
     assert_equal(a, b) 
     end 
    end 
end 
0

Entschuldigung, aber ich kann Ihre Situation nicht reproduzieren, können Sie bitte Test::Unit Version und Ihre Rubinversion zur Verfügung stellen? Am besten wäre Ihr Gemfile mit Gemfile.lock. Das folgende Setup funktioniert für mich (ich benutze Rubin 2.2.0 und Test-Einheit 3.0.8):

ruby-2.2.0 in ~/projects/test-unit ♥ tree 
. 
├── Gemfile 
├── Gemfile.lock 
└── test 
    ├── helper.rb 
    └── sample_test.rb 

1 directory, 4 files 

ruby-2.2.0 in ~/projects/test-unit ♥ cat Gemfile 
# A sample Gemfile 
source "https://rubygems.org" 

# gem "rails" 
gem 'test-unit', '~> 3.0.8' 
ruby-2.2.0 in ~/projects/test-unit ♥ cat Gemfile.lock 
GEM 
    remote: https://rubygems.org/ 
    specs: 
    power_assert (0.2.2) 
    test-unit (3.0.8) 
     power_assert 

PLATFORMS 
    ruby 

DEPENDENCIES 
    test-unit (~> 3.0.8) 

sample_test.rb:

require 'test-unit' 

def a; true ; end 
def b; true ; end 
def test; true ; end 

class SampleTest < Test::Unit::TestCase 
    require 'helper' 
    include AssertionHelper 
    def test_sample 
     my_assertion 
    end 
end 

helper.rb:

module AssertionHelper 
    def my_assertion 
     assert_true(test) 
     assert_equal(a, b) 
    end 
end 

Running testrb gibt 2 Assertions wie erwartet.

ruby-2.2.0 in ~/projects/test-unit ♥ testrb 
Loaded suite . 
Started 
. 

Finished in 0.000828 seconds. 

1 tests, 2 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 
100% passed 

1207.73 tests/s, 2415.46 assertions/s 
ruby-2.2.0 in ~/projects/test-unit ♥ 

UPDATE: Das ist eigentlich seltsam, dass Sie keine Fehler bekommen (auf der Methode 3), weil ich diese: NoMethodError: undefined method 'assert_true' for AssertionHelper:Module und das ist wahr, da AssertionHelper keine andere Methoden implementieren , Sie können keine assert_* Methoden darauf ausführen. Benutze einfach meinen obigen Code (deine Methode 2) und es sollte dir gut gehen. Wenn Sie immer noch neugierig sind, was Sie tun können, werfen Sie einen Blick auf Test::Unit::Assertions, es gibt auch eine Reihe von integrierten Assertions, vielleicht finden Sie das nützlich.

Oder, besser, verwenden MiniTest oder RSpec, seit Test :: Unit is deprecated und ist in der Standard-Bibliothek nur für Legacy-Testsuiten gelassen.

+0

Ich habe meine Frage aktualisiert. Können Sie es jetzt erneut testen? – karan

+0

Fügen Sie "include Test :: Unit :: Assertions" in helper.rb ein. Ihr assert_true-Fehler wird behoben. – karan

+0

Sie sollten es "erweitern" anstatt "include". Ja, das behebt den Fehler, aber das behebt Ihr Problem nicht - Behauptungen im Modul werden immer noch nicht gezählt. Dies geschieht, weil die 'add_assertion' Methode in' Test :: Unit :: Assertions' leer ist. Um es funktionieren zu lassen, müssen Sie ihm eine Instanz Ihrer 'Test :: Unit :: TestCase' übergeben, damit Sie seine 'add_assertion'-Methode von der' add_assertion' Ihres Moduls aufrufen können, um sie zählen zu lassen. Alles in allem ist es zu umständlich, es zu implementieren, daher bevorzuge ich meine obige Lösung. Warum magst du es nicht? –