Hi All,
I have a Search class with a :nameRE setter which may validly be
either nil or a regular expression.
I setup the unit test:
def test_002_IfNameGivenThenRE
@search.nameRE = ‘/.rb$’
assert_raise(RuntimeError, @search.run)
end
search.run invokes validate which in turn invokes:
fail "'#{@nameRE.source}' is not a valid regular expression for
nameRE!" if
@nameRE && Regexp.new(@nameRE).class != Regexp
That lead to the unit test result:
- Failure:
test_002_IfNameGivenThenRE(TestValidation) [UnitTestSearch.rb:23]:
exception expected but was
Class:
Message: <“no block given”>
So I thought I should change the assert to:
@search.nameRE = ‘/.rb$’
assert_raise(LocalJumpError, @search.run)
but that gave me the test result: Only other failures but none for
the nameRE.
Did I present my question clearly? Any ideas?
Thanks in Advance,
Richard
You are using assert_raise improperly. It should be
assert_raise(RuntimeError) do
@search.run
end
see
http://www.ruby-doc.org/core/classes/Test/Unit/Assertions.html#M006692
On Jan 18, 12:57 am, Paul McMahon [email protected] wrote:
You are using assert_raise improperly. It should be
assert_raise(RuntimeError) do
@search.run
end
see http://www.ruby-doc.org/core/classes/Test/Unit/Assertions.html#M006692
Hi Paul,
http://www.ruby-doc.org/core/classes/Test/Unit/Assertions.html#M006692
Thanks for the reference.
OK, I’ve got it: here are the first two validation expressions in
Search#validate:
fail “Starting search directory is required: " +
(@dirname ? ('”’ + @dirname + ‘"’) : ‘nil’) +
" is not a directory" unless
@dirName && File.directory?(@dirName)
fail “‘#{@nameRE}’ is not a valid regular expression for nameRE!” if
@nameRE && !@nameRE.instance_of?(Regexp)
The corresponding unit tests (all of which succeed) are:
def test_000_DirRequired
@search.dirName = nil
assert_raise(RuntimeError) {@search.run}
end
def test_001_DirMustBeValid
@search.dirName = ‘…/no_such_dir’
assert_raise(RuntimeError) {@search.run}
end
def test_002_IfNameGivenThenRE
@search.nameRE = ‘/.rb$’
assert_raise(RuntimeError) {@search.run}
end
And everything works as expected when actually using the setters for a
real invocation of Search.
Thanks for your help.
Best wishes,
Richard