class test
def initialize(val1,val2)
validate(val1,val2)
end
private
def validate(val1,val2)
raise xxxx errorless val1.presnet?
raise yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
end
end
General Writing
@test=Test.new(val1,val2)
@test.send(:validate,val1,val2)
→Validate runs twice?(when instance is generated and when run in send
)Solution
①Stub new and return dummy instances of the Test class?
(I don't know how to use a dummy instance...)
他 Call the private method directly using other methods
(I don't know how to call...)
、 and どちらWhich one is better
①How do I return a dummy instance if
②In the case of
how exactly do you call them?
I would like to know that
I'm sorry, but I'd appreciate it if you could let me know as a beginner.
ruby rspec test
Basically, I don't think I will test the private method.
In this case, it would be better to test Test#initialize
(this is also a private method, so Test.new
).
expect {Test.new(...)}.to raise_error(xxxerror)
You can use Class#allocate
to ensure that only objects are secured without executing the initialize method.
@test=Test.allocate
@test.send(:validate,val1,val2)
If it's rspec,
expect {Test.allocate.send(:validate,val1,val2)}.to raise_error XXXXError
However, if there is a class from which to inherit it, initialize it will not be executed, and the test code can be complicated because it will be a really empty object.
If possible, the class should be designed not to write such tests.
© 2024 OneMinuteCode. All rights reserved.