我想为我的数据模型编写有意义且有效的测试
我一直在尝试像 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 非常感兴趣,但它是如此令人生畏。如果您发现我的代码中有任何不好的做法,或者缺少最佳做法,请告诉我。