私のモデルの1つでは、いくつかのメタプログラミングを使用して、いくつかのメソッドを動的に定義しています。これをテストしたいと思います。したがって、モデルに特定の名前の読み取り/書き込み可能な属性があることを表明するためのコンパクトな方法が必要です。アイデア?
違いが出る場合は、ユニットテストにshouldaを使用しています。
私のモデルの1つでは、いくつかのメタプログラミングを使用して、いくつかのメソッドを動的に定義しています。これをテストしたいと思います。したがって、モデルに特定の名前の読み取り/書き込み可能な属性があることを表明するためのコンパクトな方法が必要です。アイデア?
違いが出る場合は、ユニットテストにshouldaを使用しています。
should_have_instance_methodsまたはshould_have_class_methodsshouldaマクロを使用できる可能性があります-私はこのユースケースを試していませんが、ActiveRecord::Baseのスーパークラスを持つオブジェクトに依存している可能性があります
reply_toはどうですか?
o = some_dynamic_object()
assert(o.respond_to?(:method_x)) # getter
assert(o.respond_to?("method_x=".to_sym) # setter
定義方法に応じて、いくつかの方法があります。通常(何らかの方法で、またはまたはで)定義した場合はdef
、define_method
リーダーeval
に応答することを確認するためにclass_eval
使用できますdefined? obj.prop
(ライターに相当するものはありません)。obj.respond_to? :prop
リーダーやobj.respond_to? :prop=
ライターにも使用できます。
method_missing
プロパティの呼び出しを模倣するために使用している場合は、それobj.respond_to?
も再定義した場合にのみ機能し(この場合、個別にテストする必要があります)、プロパティをテストする唯一の方法は、プロパティから読み取りを試してみることです。それに書き込み、例外をスローしないことを主張します。