2017-06-10 6 views
0

クラスTesterを実装するように要求します。クラスTesterは、クラスtestを受け取り、testという単語で始まるすべてのメソッドを実行します。Ruby Testerの作り方は?

class AssertionFailed < Exception 
end 
class TestCase 
    def setUp 
    end 
    def tierDown 
    end 
    def assertTrue(expresion) 
    if not expresion then 
     raise AssertionFailed.new(expresion.to_s + " is not true") 
    end 
    end 
    def assertEquals(result, expected) 
    if result != expected 
     raise AssertionFailed.new(result.to_s + " is not equal to " + expected.to_s) 
    end 
    end 
end 
class IntegerTest < TestCase 
    def setUp 
    @number = 1 
    end 
    def testSum 
    assertTrue(1 + @number == 2) 
    @number += 1 
    end 
    def testSub 
    assertTrue(2 - @number == @number) 
    end 
    def testMulByZero 
    assertEquals(@number*0, 1) 
    end 
    def testAddByZero 
    assertEquals(@number + 0, @number + 1) 
    end 
end 

Tester.test(IntegerTest) 

例:

Tester.test(IntegerTest) 
[*] testMulByZero failed: 0 is not equals to 1 
[*] testAddByZero failed: 1 is not equals to 2 

ヘルプ:反復処理可能モジュールのgrepの方法は、正規表現を受け取り、そしてその式に一致するすべての の要素を返します。演習のために、 でgrep(\ test *)を使用して、求められているメソッドを取得するメソッドのコレクション。

+0

JFYI、testAddByZero' 'などのメソッド名が受け入れられた命名規則に準拠していません。慣習的な方法は 'test_add_by_zero'でしょう。一般的に、 'camelCase'はRubyで使われていません。 –

答えて

0

私は最終的に私が行っていることは与えられたテストを開始している このsourceで答えを得て、このone、その後、私はテストで始まる彼のinstace testigクラスを解除するかどうかを確認することにより、配列を作成し、finalyそれは反復ですメソッドのeachoneを実行すると、彼らは主張を失敗した場合、次に示すことを求めアレイ上にそれら

class Tester 

def self.test(testing) 
    tested=testing.new 
    tested.setUp 
    method_arr=testing.instance_methods.grep(/test*/) 
    method_arr.each do |x| 
     begin 
     tested.send(:"#{x}") 
     rescue AssertionFailed =>assert_fail 
      puts "[*]" + "#{assert_fail}" 
     end 
    end 
end 

エンド

+0

'tested.send(x)'だけを使うことができます。 –

関連する問題