Creating unit-test where RE required

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:

  1. 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