class UserTest < Test::Unit::TestCase def test_user_should_have_valid_email_address flunk "write test verifying user"s email address" end end이 코드는 다음과 같은 에러를 출력한다.
1) Failure: test_user_should_have_valid_email_address:5 write test verifying user"s email address.정확하게 작동하기는 하지만 원하는대로 작동하지는 않고 있다. RSpec은 좀 더 나은 방법으로 처리하고 있는데, 바로 자동적으로 비어있는 예제를 찾으면 아직 구현되지 않은 것으로 분류한다. 그러므로 위와 같은 기능을 다음과 같이 구현할 수 있다.
describe "user" do it "should have a valid email address" end결과는 다음과 같다.
Finished in 0.03517 seconds 1 example, 0 failures, 1 pending Pending: user should have a valid email address (Not Yet Implemented)그럼 이 점을 유념하고 몇 주전에 기반 코드를 작성할 때 테스트 되지 않은 상태로 넣었던 유저 인터페이스에 어떠한 테스트가 필요한지를 알아보도록 하자.
require File.join(File.expand_path(File.dirname(__FILE__)),"helper") require "#{LIB_DIR}/interface" describe "An interface" do it "should prompt for players" it "should prompt for grid size" it "should be able to update board display" it "should display a score board" it "should prompt for a players move" end이제 이 코드를 실행하면 다음과 같은 결과를 볼 수 있다.
PPPPP Finished in 0.010666 seconds 5 examples, 0 failures, 5 pending Pending: An interface should prompt for players (Not Yet Implemented) An interface should prompt for grid size (Not Yet Implemented) An interface should be able to update board display (Not Yet Implemented) An interface should display a score board (Not Yet Implemented) An interface should prompt for a players move (Not Yet Implemented)아직 구현되지 않은 부분에 대해서 출력해 주고 있는 것을 볼 수 있다. 이렇게 구현해야 할 사항들에 대해서 기록해 주면 스펙을 작성하는데에도 많은 도움이 된다.
describe "the answer" do before :each do @answer = 0 end it "should be 42" do pending("We need to wait 7.5 million years") do @answer.should == 42 end end end이 코드를 실행하고 나면 결과 보고는 다음과 같이 나오게 된다.
P Finished in 0.037488 seconds 1 example, 0 failures, 1 pending Pending: the answer should be 42 (We need to wait 7.5 million years)재밌는 것은 나중에 누군가가 이 문제를 해결하게 되면, 위의 결과가 실패로 변하게 된다는 것이다. 예를 들어 설정을 @answer = 42 와 같이 변경을 하게 된다면 다음과 같은 결과가 나온다.
F 1) "the answer should be 42" FIXED Expected pending "We need to wait 7.5 million years" to fail. No Error was raised. /Users/sandal/Desktop/foo.rb:11: /Users/sandal/Desktop/foo.rb:4: Finished in 0.034342 seconds 1 example, 1 failure예제가 성공적으로 고쳐지게 되면 실패했다는 결과가 발생하게 되고, 이걸 보고 pending()을 이제 지울 수가 있겠구나 라는 생각을 할 수 있도록 해준다. 물론 이런 방식을 불필요하게 많이 사용하는 건 좋은 방법이 아니지만, 그저 주석처리로 처리해 놓은 후에 나중에 잃어버리고 처리하지 못하는 것에 비하면 괜찮은 방법이라고 할 수 있다.
최신 콘텐츠