code

MiniTest의 assert_raises / must_raise에서 예외 메시지를 확인하기위한 예상 구문은 무엇입니까?

codestyles 2020. 9. 24. 07:52
반응형

MiniTest의 assert_raises / must_raise에서 예외 메시지를 확인하기위한 예상 구문은 무엇입니까?


MiniTest의 assert_raises/ 에서 예외 메시지를 확인하는 데 예상되는 구문은 무엇입니까 must_raise?

다음과 같은 어설 션을 만들려고 "Foo"합니다. 예상되는 오류 메시지는 어디에 있습니까 ?

proc { bar.do_it }.must_raise RuntimeError.new("Foo")

assert_raises어설 션 또는 must_raise예상을 사용할 수 있습니다 .

it "must raise" do
  assert_raises RuntimeError do 
    bar.do_it
  end
  ->     { bar.do_it }.must_raise RuntimeError
  lambda { bar.do_it }.must_raise RuntimeError
  proc   { bar.do_it }.must_raise RuntimeError
end

오류 개체에서 무언가를 테스트해야하는 경우 다음과 같이 어설 션 또는 기대치에서 가져올 수 있습니다.

describe "testing the error object" do
  it "as an assertion" do
    err = assert_raises RuntimeError { bar.do_it }
    assert_match /Foo/, err.message
  end

  it "as an exception" do
    err = ->{ bar.do_it }.must_raise RuntimeError
    err.message.must_match /Foo/
  end
end

예외를 주장하려면 :

assert_raises FooError do
  bar.do_it
end

예외 메시지를 주장하려면 :

당으로 API의 문서 , assert_raises등, 당신이 메시지를 확인 할 수 있도록 예외가 일치 반환 속성

exception = assert_raises FooError do
  bar.do_it
end
assert_equal('Foo', exception.message)

Minitest는 (아직) 실제 예외 메시지를 확인하는 방법을 제공하지 않습니다. 하지만이를 수행하는 도우미 메서드를 추가하고 ActiveSupport::TestCase레일 테스트 스위트의 모든 곳에서 사용 하도록 클래스를 확장 할 수 있습니다. 예 : intest_helper.rb

class ActiveSupport::TestCase
  def assert_raises_with_message(exception, msg, &block)
    block.call
  rescue exception => e
    assert_match msg, e.message
  else
    raise "Expected to raise #{exception} w/ message #{msg}, none raised"
  end
end

다음과 같은 테스트에서 사용하십시오.

assert_raises_with_message RuntimeError, 'Foo' do
  code_that_raises_RuntimeError_with_Foo_message
end

좀 더 최근 개발 을 추가 하기 위해 과거에 운이 좋지 않은 미니 테스트 에 추가 하는 것에 대한 논의 가있었습니다 assert_raises_with_message.

현재, 병합을 기다리고 있는 유망한 풀 리퀘스트 가 있습니다. 병합되면 assert_raises_with_message직접 정의하지 않고도 사용할 수 있습니다 .

In the meanwhile, there is this handy little gem named minitest-bonus-assertions which defines exactly that method, along with few others, so that you can use it out of the box. See the docs for more information.

참고URL : https://stackoverflow.com/questions/14418628/what-is-the-expected-syntax-for-checking-exception-messages-in-minitests-assert

반응형