0

私のモデルの1つでは、いくつかのメタプログラミングを使用して、いくつかのメソッドを動的に定義しています。これをテストしたいと思います。したがって、モデルに特定の名前の読み取り/書き込み可能な属性があることを表明するためのコンパクトな方法が必要です。アイデア?

違いが出る場合は、ユニットテストにshouldaを使用しています。

4

2 に答える 2

3

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
于 2010-04-20T00:32:33.490 に答える
2

定義方法に応じて、いくつかの方法があります。通常(何らかの方法で、またはまたはで)定義した場合はdefdefine_methodリーダーevalに応答することを確認するためにclass_eval使用できますdefined? obj.prop(ライターに相当するものはありません)。obj.respond_to? :propリーダーやobj.respond_to? :prop=ライターにも使用できます。

method_missingプロパティの呼び出しを模倣するために使用している場合は、それobj.respond_to?も再定義した場合にのみ機能し(この場合、個別にテストする必要があります)、プロパティをテストする唯一の方法は、プロパティから読み取りを試してみることです。それに書き込み、例外をスローしないことを主張します。

于 2010-04-20T00:33:48.640 に答える