����ϡ����Ρ�Ʊ�������ɡפ������

��ï���񤤤Ƥ�Ʊ�������ɡפ�����ʤ��ȤʤΤ� - �Ҥ��䤹�� blog
�Ǥ⡢��ï���񤤤Ƥ�Ʊ�������ɡפˤ���äƤΤϡ����⤽��̵�����Ȼפ������͡�������äơ��虜�虜�ɥ�����Ȥ򤿤�����񤫤��Ƥ⡢�᤿�᤿�ʥ����ɤ�񤯤�ĤϤ��ơ�����ƥ��Ȥ���Ȥ��ˡ������dz���夬���Ρ��������٤ε��ϰʾ�Υץ��������Ȥʤ顢�ɤ��Ǥ⤽��ʴ�������ʤ����Ȼפ��ޤ���

Ʊ���ֽ����פ򤷤ʤ���Фʤ�ʤ��Τ�?

��̤���Ʊ���פʤ餤���Τ�?

�⤷��Ԥ��Ȥ����顢�¤�

���פʤΤϡ���ï�Ǥ���ƥʥ󥹤Ǥ��륳���ɡפˤ��뤳�ȡ����Τ���ˡ������ǥ��󥰵���ϡ�������ȷ��Ƥߤ�ʤǼ�롢����ʾ�ϡ���������������ɬ�פϤʤ���

����ɬ�פ���ޤ��󡣤ʤ��ʤ顢�ǰ������ɤϽ�ľ���Ф�����Ǥ����顣

���������֤��Υ����ɤ����򤹤٤����פ��狼�äƤ��ʤ��ȡ����Ȥ������������äƤ�̵�Ϥʾ�礬�ۤȤ�ɡ�����ʥ������Ǥ��餽���ǡ��ޤ��Ƥ䥹�ѥ��åƥ������ɤȤ�ʤ�С�

���ΰ�̣�ǡ��¤ϥ����ǥ��󥰵����ꡢ���ƥʥ֥�ʥ����ɤ������Ω�ĤΤ����ƥ��ȡ��פϥƥ��Ȥ�ѥ����Ƥ��ޤ��Фɤ������ɤ��Ƥ⹽��ʤ����Ȥ����Τ�TDD = Test Driven Development =�ƥ��ȶ�ư��ȯ�ιͤ����Υ١����ȤʤäƤ��ޤ���

�ΤǤ�����TDD��Perl������Ƥ��ޤ�����ڤ��Ƥޤ��󡣤��줬�ʤ����Ȥ����С��ƥ��Ȥ����ޤ�ˤ�����--���Ȼפ��Ƥ��뤫��Ǥ�������򸫤�С����ݤ��Ȼפ���Τ��������Ȼפ��ޤ���

��TDDer�������֥��׻Ϥ�ޤ��� - t-wada������
public void testDefaultStackSizeShouldBeZero throws Exception {
  assertEquals("����ľ��Υ����å��Υ�������0�Ǥ��뤳��", 0, stack.size());
}
Test::Unit - Ruby��ե���󥹥ޥ˥奢��
require 'test/unit'
require 'foo'

class TC_Foo < Test::Unit::TestCase
  def setup
    @obj = Foo.new
  end

  # def teardown
  # end

  def test_foo
    assert_equal("foo", @obj.foo)
  end
  def test_bar
    assert_equal("bar", @obj.bar)
  end
end

���������ƥ��Ȱ�ĤΤ���ˡ��ؿ������Υ᥽�åɺ����Τäƾ�ʤ˸���줿�顢����äƤ�������Υ��åѡ����ʤ�����Ĥ������ʤ�ޤ��衣��ϼºݤˤ��������ٶ��ޤǤϤʤ��Τǡ�assert_unko()���������mail������Ĥ������٤ˤȤ�Ȥ��Ȥ�פ��ޤ�����

����ʤ��ʤ��ˤ�����ʤΤ���Test Anything Protocol��ά����TAP�Ǥ���ά�ΤΤ��Ȥ��ڤ䤫�Ǥ�������Perl�ǻȤ��Ƥ��ޤ����������ޤ�˥���ץ�ʤΤǸ�����䤤�ޤ��󡣤ʤˤ����ƥ��ȥץ������ϡ�ɸ����Ϥˤ�������˽��Ϥ�������Ǥ����ΤǤ����顣

Test Anything Protocol - Wikipedia, the free encyclopedia
1..N
ok 1 Description # Directive
# Diagnostic
....
ok 47 Description
ok 48 Description
more tests....

�ºݤ�ruby��FizzBuzz��ƥ��Ȥ��Ƥߤޤ��礦��

% ruby fizzbuzz.t
1..17
ok # 1
ok # 2
ok # 3
ok # 4
ok # 5
ok # 6
ok # 7
ok # 8
ok # 9
ok # 10
ok # 11
ok # 12
ok # 13
ok # 14
ok # 15
# got:      
# expected: FizzBuzz
not ok # 16
# got:      
# expected: 16

����Ǥ������Ϥ狼��ޤ�����

% ruby fizzbuzz.t | grep ^not
not ok # 0
not ok # 16

�������ȯ���Ǥ���Ȥ������⤰���Ǥ�����perl�����󥹥ȡ��뤵��Ƥ���С�����˥ƥ��Ȥ�¹Ԥ��Ƥ����ץ�����ࡢprove��ϳ��ʤ��Ĥ��Ƥ��ޤ������졢Perl�ʳ��Υץ������Ǥ⡢TAP�˽�򤷤Ƥ���Хƥ��Ȥ��Ƥ����ΤǤ��衣

% prove fizzbuzz.t
fizzbuzz....FAILED tests 16-17                                               
        Failed 2/17 tests, 88.24% okay
Failed Test Stat Wstat Total Fail  List of Failed
-------------------------------------------------------------------------------
fizzbuzz.t                17    2  16-17
Failed 1/1 test scripts. 2/17 subtests failed.
Files=1, Tests=17,  0 wallclock secs ( 0.00 cusr +  0.01 csys =  0.01 CPU)
Failed 1/1 test programs. 2/17 subtests failed.

�Ǥϡ��ºݤΥƥ��ȥץ������fizzbuzz.t�ȡ��ƥ��ȥץ��������ư���뤿��Υץ������tap.rb�򸫤Ƥߤޤ��礦�� fizzbuzz.t

#!/usr/local/bin/ruby

require 'tap.rb'
require 'fizzbuzz.rb'

test 17
is fizzbuzz(1),   1,           1
is fizzbuzz(2),   2,           2
is fizzbuzz(3),  'Fizz',       3
is fizzbuzz(4),   4,           4
is fizzbuzz(5),  'Buzz',       5
is fizzbuzz(6),  'Fizz',       6
is fizzbuzz(7),   7,           7
is fizzbuzz(8),   8,           8
is fizzbuzz(9),  'Fizz',       9
is fizzbuzz(10), 'Buzz',      10
is fizzbuzz(11),  11,         11
is fizzbuzz(12),  'Fizz',     12
is fizzbuzz(13),  13,         13
is fizzbuzz(14),  14,         14
is fizzbuzz(15), 'FizzBuzz',  15

is fizzbuzz(0),  'FizzBuzz',   0
is fizzbuzz(16), 16,          16
tap.rb
def test(ntests=0)
    puts "1..#{ntests}" if ntests > 0
end

def is(got, expected, message=nil)
    print 'not ' if expected != got
    print 'ok'
    print " # #{message}" if message
    print "\n";
    if expected != got
       puts "# got:      #{got}"
       puts "# expected: #{expected}"
    end
end

tap.rb���Τ�FizzBuzz�¤ߤ˴�ñ�����ˤ�α�դ���������

�ǡ�(�虜�Ȥ餷��)�ƥ��Ȥˤ�����FizzBuzz����������Ƥ���fizzbuzz.rb�򸫤Ƥߤޤ��礦��

def fizzbuzz(n)
    return 1 if n == 1
    return 2 if n == 2
    return 'Fizz' if n == 3
    return 4 if n == 4
    return 'Buzz' if n == 5
    return 'Fizz' if n == 6
    return 7 if n == 7
    return 8 if n == 8
    return 'Fizz' if n == 9
    return 'Buzz' if n == 10
    return 11 if n == 11
    return 'Fizz' if n == 12
    return 13 if n == 13
    return 14 if n == 14
    return 'FizzBuzz' if n == 15
end

����ʤ��������񤤤��麣�٤������ˤ�����(ry

�Ȥ����ΤϤ����Ȥ��ơ������

def fizzbuzz(n)
    fz =   if n % 3 == 0 then 'Fizz' else '' end
    fz +=  if n % 5 == 0 then 'Buzz' else '' end
    if fz == '' then n else fz end
end

�ȤǤ⺹���ؤ��Ƹ��ޤ��礦�����٤Ϥɤ��Ǥ��礦��?

% prove fizzbuzz.t
fizzbuzz....ok                                                               
All tests successful.
Files=1, Tests=17,  0 wallclock secs ( 0.00 cusr +  0.01 csys =  0.01 CPU)

����TAP��Wikipedia�������Ǥ⽼ʬ�ʤΤǤ�����"Perl Testing"�ˤϤ���˾ܤ����ܤäƤ��ޤ����ޤ����ܸ��ǤϤʤ����ޤ�Ƭ��"Perl"�ȤĤ��ƤϤ���ΤǤ��������Ƥ�ʿ�פǡ������ʤ⤳�μ���ܤȤ��Ƥ�3,000�ߤ��ڤäƤ���Τǡ�Perl�ץ�����ޡ��Ǥʤ��Ƥ�TDD�������Ȥ���ͤ��ܤ��̤��Ƥ����٤�����Ǥ���

assert�ˤ��󤶤ꤷ�Ƥ��뤢�ʤ���Test�Ϥ�ä�Simple�ˤʤꤦ�뤷�������٤��ʤΤǤ���

Dan the TAP Dancer