意味があり機能するデータ モデルのテストを作成したい
私はLaravel のボスのようなモデルをテストしようとして遊んでいます(現在、私は中間管理職の地位を維持するのに苦労していると言えます)。私はArdent
自分のデータモデルに使用しています。Factory Muff
上で参照されている記事は、非常に素晴らしいように見え、モック オブジェクトの作成を容易にするのに非常に便利です。
Factory Muff
しかし、深く掘り下げると、提供できるデータが非常に限られていることがわかります。基本的にランダムな言葉とメールアドレスです。それ以上のものは、静的メソッドをデータ モデルに記述して、モック オブジェクトの有効なデータを生成する必要があるようです。それはあまり役に立たないように思えますが、私はおそらくそれを間違ってやっていると推測していFactory Muff
ます。
データモデルで
次のデータ検証ルールセットを検討してください。
public static $rules = [
'property' => 'required|address',
'name' => 'required|name',
'email' => 'required|email',
'phone' => 'required|phone',
'dob' => 'required|date',
];
Factory Muff
正しい形式でフォーマットされたデータを生成する静的メソッドを書きたくない限り、名前と電子メールアドレスを超えてこのデータを生成するのにはまったく適していないようです。これは、検証エラーを発生させずにモックオブジェクトを作成できるようにするために私がしなければならないと思うことです:Factory Muff
public static $factory = [
'property' => 'call|makeStreetAddress',
'name' => 'string',
'email' => 'email',
'phone' => 'call|makePhone',
'dob' => 'date|makeDate',
];
public static function makeStreetAddress()
{
$faker = \Faker\Factory::create();
return $faker->streetAddress;
}
public static function makePhone()
{
$faker = \Faker\Factory::create();
return $faker->phoneNumber;
}
public static function makeDate()
{
$faker = \Faker\Factory::create();
return $faker->date;
}
これは、特にテーブルに 10 から 20 のフィールドがある場合、かなり冗長に見えます。また\Faker\Factory::create()
、すべての静的メソッド呼び出しを呼び出すのも好きではありません (具体的な理由はありません。単に好きではないだけです。回避策を知っている場合、または私の恐怖に根拠がない場合は、お知らせください。 .)
データベース シーダーで
開発とテストで使用するために、データベースに大量のガベージを生成するために使用するデータベース シード スクリプトをセットアップしました。Faker
とても直感的で使いやすいです。たとえば、これは上記のデータ セットのシード スクリプトです。
$faker = \Faker\Factory::create();
$application = Application::create([
'property' => $faker->streetAddress,
'name' => $faker->name,
'email' => $faker->email,
'phone' => $faker->phoneNumber,
'dob' => $faker->dateTimeBetween('-60 years', '-18 years'),
]);
自分がここで何をしているのかを考えれば考えるほど、余計なことをしているように感じます。
質問
- テストを実行する前にによって生成されたガベージ データをデータベースにシードしている場合、モック オブジェクトを作成する
Faker
必要さえありますか?Factory Muff
データベースからのシード データを使用して、コードベースを適切にテストできないでしょうか? なぜ私は嘲笑する必要があるのですか? - 私は全体の要点を逃してい
Faker Muff
ますか? 利点はありますか?ランダムワードジェネレーターに過ぎないように思えます。 - 私は何を間違っていますか?私はTDDに非常に興味がありますが、とても気が遠くなります。私のコードに悪い慣行やベスト プラクティスの欠如に気付いた場合は、お知らせください。