質問: Test.new(val1, val2) @test.send(:validate, val1, val2) ``` →validateが2回走る?(インスタンス生成時とsendで実行した時 解決方法 1newをstubしてTestクラスのダミーインスタンスを返却? (ダミーインスタンスの方法がわからないです。。。) 2他の方法でprivateメソッドを直接呼び出す (呼び出す方法が分からないです。。。) ### 聞きたいこと 1、2どちらが良いのか 1の場合どうやってダミーインスタンスを返却するのか 2の場合、具体的にどんな書き方で呼び出すのか を知りたいです。 spec始めたばかりの初心者で申し訳ないですがご教示いただけると嬉しいです。
回答: initializeメソッドを実行せずにオブジェクトだけ確保するには`Class#allocate`でできます。 ``` @test = Test.allocate @test.send(:validate, val1, val2) ``` rspecでしたら ``` expect { Test.allocate.send(:validate, val1, val2) }.to raise_error XXXXError ``` ただし、継承元クラスがあればそれのinitializeも実行されず、本当に中身のないオブジェクトになるのでテストコードが煩雑になりかねません。 できればそのようなテストは書かないようにクラス設計すべきです。