Почему эта переменная экземпляра nil при доступе в другом модульном тесте? - PullRequest
2 голосов
/ 15 июля 2010
require 'rubygems'
require 'test/unit'

class Thing
  attr_accessor :foo

  def set_stuff
    @foo = 'bar'
  end
end

class ThingTest < Test::Unit::TestCase
  def setup
    @thing = Thing.new
  end

  def test_set_stuff
    @thing.set_stuff
    assert 'bar' == @thing.foo
  end

  def test_foo_in_other_test
    puts @thing.foo
    assert 'bar' == @thing.foo
  end
end


# Loaded suite testing
# Started
# nil
# F.
# Finished in 0.00439 seconds.
#
#   1) Failure:
# test_foo_in_other_test(ThingTest) [testing.rb:26]:
# <false> is not true.
#
# 2 tests, 2 assertions, 1 failures, 0 errors

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

Разница в том, что вы не вызываете @ thing.set_stuff во втором тесте.

1 голос
/ 16 июля 2010

Я не так знаком с Test :: Unit, как RSpec, но я верю, что метод setup () будет вызываться при каждом запуске теста. Поэтому одно @ будет заменено другим.

Кроме того, я обнаружил, что вы не можете принять конкретный порядок выполнения тестовых случаев; часто (возможно, постоянно?) тесты запускаются от начала к началу, как это, кажется, имеет место в этом случае.

...