Testing for warnings

Is there a way of asserting that a warning is raised in a unit test? So I could write something like:

assert_warns "Blah blah" do function_that_warns(foo) end

I can't seem to find anything in the test/unit docs, but it seems like something that would be relatively common to test for...

Alex Gutteridge

Bioinformatics Center
Kyoto University

You may try to write that yourself by replacing Kernel#warn, though
this way you cannot check warnings from C code. Alternatively you
could replace/capture $stderr/STDERR and look for warnings there.

···

On 7/2/07, Alex Gutteridge <alexg@kuicr.kyoto-u.ac.jp> wrote:

Is there a way of asserting that a warning is raised in a unit test?
So I could write something like:

assert_warns "Blah blah" do function_that_warns(foo) end

I can't seem to find anything in the test/unit docs, but it seems
like something that would be relatively common to test for...

I specifically need to check for warnings from C code so replacing Kernel#warn won't work. I will try hooking into STDERR though - thanks for the idea.

Alex Gutteridge

Bioinformatics Center
Kyoto University

···

On 3 Jul 2007, at 06:23, Jano Svitok wrote:

On 7/2/07, Alex Gutteridge <alexg@kuicr.kyoto-u.ac.jp> wrote:

Is there a way of asserting that a warning is raised in a unit test?
So I could write something like:

assert_warns "Blah blah" do function_that_warns(foo) end

I can't seem to find anything in the test/unit docs, but it seems
like something that would be relatively common to test for...

You may try to write that yourself by replacing Kernel#warn, though
this way you cannot check warnings from C code. Alternatively you
could replace/capture $stderr/STDERR and look for warnings there.

Possibly make use of Mocha or another mocking framework?

class Foo
  def bar
    warn "baz"
  end
end

require "test/unit"
require "rubygems"
require "mocha"

class TestFoo < Test::Unit::TestCase

  def test_bar_should_warn
    a = Foo.new
    a.expects(:warn).with("baz")
    a.bar
  end

end

···

On 7/2/07, Alex Gutteridge <alexg@kuicr.kyoto-u.ac.jp> wrote:

I specifically need to check for warnings from C code so replacing
Kernel#warn won't work. I will try hooking into STDERR though -
thanks for the idea.