testen Ich versuche, Logik zu testen, die während der Klassenvererbung ausgeführt wird, aber ein Problem beim Ausführen mehrerer Zusicherungen aufgetreten.wie Ruby Vererbung mit rspec
ich zum ersten Mal versucht, ...
describe 'self.inherited' do
before do
class Foo
def self.inherited klass; end
end
Foo.stub(:inherited)
class Bar < Foo; end
end
it 'should call self.inherited' do
# this fails if it doesn't run first
expect(Foo).to have_received(:inherited).with Bar
end
it 'should do something else' do
expect(true).to eq true
end
end
aber dies nicht gelingt, weil die Bar-Klasse bereits geladen worden ist, und daher nicht inherited
ein zweites Mal nicht nennen. Wenn die Assertion nicht zuerst ausgeführt wird, schlägt sie fehl.
So dann habe ich versucht, so etwas wie ...
describe 'self.inherited once' do
before do
class Foo
def self.inherited klass; end
end
Foo.stub(:inherited)
class Bar < Foo; end
end
it 'should call self.inherited' do
@tested ||= false
unless @tested
expect(Foo).to have_receive(:inherited).with Bar
@tested = true
end
end
it 'should do something else' do
expect(true).to eq true
end
end
weil @tested
nicht von Test bestehen zu testen, wird der Test nicht nur einmal ausgeführt werden.
Wer hat irgendwelche cleveren Möglichkeiten, dies zu erreichen? Dies ist ein konstruiertes Beispiel und i dont tatsächlich Bedarf selbst zu testen, Rubin;)
Testen Sie das Verhalten, nicht Implementierung. Das Testen, ob die Klasse von der Come-Klasse erbt, wäre nur dann sinnvoll, wenn die Methode Meta-Programmierung durchführt (wie Konstruieren von Klassen und Setzen von Ancestoren) –