As you answered in your question the easiest way to set instance variable is with instance_eval method:
obj.instance_eval('@a = 1')
Another way is to use instance_variable_set:
obj.instance_variable_set(:@a, 1)
But I would not recommend to do this in your specs. Specs are all about testing behavior of an object and testing behaviour by breaking class encapsulation with instance_eval will make your tests more fragile and implementation dependent.
Alternative approach to object state isolation is to stub accessor methods:
class UnderTest
attr_accessor :a
def test_this
do_something if a == 1
end
end
#in your test
under_test = UnderTest.new
under_test.stub(:a).and_return(1)