MiniTest의 assert_raises
/ 에서 예외 메시지를 확인하는 데 예상되는 구문은 무엇입니까 must_raise
?
다음과 같은 어설 션을 만들려고 "Foo"
합니다. 예상되는 오류 메시지는 어디에 있습니까 ?
proc { bar.do_it }.must_raise RuntimeError.new("Foo")
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
Minitest::Spec
하고 있는지 확인하십시오 Minitest::Test
. 예상을 포함한 Spec DSL은 Minitest::Spec
.
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
must_raise
인스턴스를 제공하므로 메시지를 직접 확인할 수 있으므로이를 사용하여 수행 할 수 있습니다.
must_raise
이전에 사용하지 않았습니다 .
좀 더 최근 개발 을 추가 하기 위해 과거에 운이 좋지 않은 미니 테스트 에 추가 하는 것에 대한 논의 가있었습니다 assert_raises_with_message
.
현재, 병합을 기다리고 있는 유망한 풀 요청 이 있습니다. 병합되면 assert_raises_with_message
직접 정의하지 않고도 사용할 수 있습니다 .
한편, 그 방법을 정확히 정의하는 minitest-bonus-assertions 라는이 편리한 작은 보석이 있습니다.이 방법은 몇 가지 다른 방법과 함께 즉시 사용할 수 있습니다. 자세한 정보 는 문서 를 참조하십시오.