2015-09-07 3 views
5

Способ 1: -Как отсчеты Утверждающие рассчитываются в тестовом образце

test.rb

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

Результат: - Законченный в 38.329532529 секунд.

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

Способ 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 

Результат: -

Finished in 38.329532529 seconds. 

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

Способ 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 

Результат: -

Finished in 38.329532529 seconds. 

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

При использовании метода 3, я получаю подсчитывать утверждение, как «0» вместо «2».

Возможно ли, чтобы я получил значение утверждения как 2, используя метод 2?

+0

почему завернуть утверждение в отдельный модуль ? – Anatoly

+0

@Anatoly У меня есть общие утверждения утверждения, которые должны быть проверены для большего количества тестовых файлов. Поэтому я поставил общие утверждения в один вспомогательный файл и вызвал это из тестовых файлов. – karan

+0

test_helper.rb предназначен для общих функций, но ** утверждения ** должны быть в тестах – Anatoly

ответ

1

Вы можете передать свой текущий TestCase для модуля, например:

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

Извините, но я не могу воспроизвести вашу ситуацию, не могли бы вы предоставить версию Test::Unit и вашу рубиновую версию? Лучше всего будет ваш Gemfile с Gemfile.lock. Следующая установка работает для меня (я использую рубин 2.2.0 и тест-блок 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 

Запуск testrb дает 2 утверждения, как и ожидалось.

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: Это на самом деле странно, что вы не получите никакой ошибки (на ваш 3 метода), потому что я получаю это: NoMethodError: undefined method 'assert_true' for AssertionHelper:Module и это верно, так как AssertionHelper не реализует никаких других методов , вы не можете запустить какие-либо методы assert_*. Просто используйте мой код выше (ваш метод 2), и все должно быть в порядке. Если вам все еще интересно, что можно сделать, взгляните на Test::Unit::Assertions, там также определено множество встроенных утверждений, может быть, вы найдете это полезным.

Или, лучше, используйте MiniTest или RSpec, так как Test :: Unit is deprecated и оставлен в стандартной библиотеке только для устаревших наборов тестов.

+0

Я обновил свой вопрос. Можете ли вы перепроверить его сейчас. – karan

+0

Включить «include Test :: Unit :: Assertions» в helper.rb. Ошибка assert_true будет решена. – karan

+0

Вы должны «расширять» его, а не «включать». Да, это исправляет ошибку, но это не устраняет вашу проблему - утверждения, сделанные в модуле, все еще не учитываются. Это происходит потому, что метод 'add_assertion' пуст в' Test :: Unit :: Assertions'. Чтобы заставить его работать, вам нужно передать ему экземпляр вашего «Test :: Unit :: TestCase», чтобы вы могли вызвать его метод 'add_assertion' из' add_assertion' вашего модуля, чтобы он подсчитал. В целом, это слишком громоздко, чтобы реализовать его, поэтому я предпочитаю свое решение выше. Почему вам это не нравится? –

Смежные вопросы