Rustのfactorybot的なライブラリ「factori」とsqlxでモックデータを生成する【1】

pythonの単体テストでよく使っていたfactoryboyというツールがあるのですが、これが本当に使いやすい! factory_boy — Factory Boy stable documentation これとfixtureを使えば、大抵のテストケースに必要なデータを引数から取得することができます。 で、これと同じようなことをRustでもやりたいな〜と思っていたんですが、「factori」というライブラリがそれに相当するということで、備忘録を兼ねて触った感想などをここに書いていこうと思います。 使い方 とりあえずCargoパッケージに追加します。 [dependencies] factori = { version = "1.1.0" } fake = "2.8.0" uuid = { version = "1.4.1", features = [ "serde", "v4" ] } 使い方はメチャクチャ簡単で、定義された構造体にfactori!マクロを定義してあげれば、create!マクロから呼び出すことができます。 fakeというライブラリと組み合わせてテストデータを作る実装は以下のようになります。 use factori::{factori, create}; use fake::Fake; use fake::faker::name::raw::*; use fake::locales::JA_JP; use uuid::Uuid; #[derive(Debug)] pub struct User { id: Uuid, name: String, } factori!(User, { default { id = Uuid::new_v4(), name = Name(JA_JP).fake::<String>(), } }); fn main() { // Userを10人作成する let user: Vec<User> = [0; 10].iter().map(|_| create!(User)).collect(); println!("{:?}", user); } これだけでUserをちゃちゃっと作る実装ができました。 ...

10月 7, 2023 · にあえん

prismaでfactoryboyみたいなやつが作りたい

作りたい。 factoryboyをご存知ですか? factory_boy — Factory Boy stable documentation pythonでテスト実装する際、ダミーデータの実装に役に立つライブラリなのですが、これがまー使いやすい。 ので、prismaでシード作るときにも同じような感じで使いたいなーと思い、実現方法を考えてみました。 factory-botを使ってみる 調べてみると、factory-botというのがありました。 Git これを使ってみたいと思います。 とりあえずディレクトリを作って初期化します。 mkdir prisma-factory-bot cd prisma-factory-bot npm init 次に、typescriptの実行基盤とお目当てのfactory-botをインストールします。 npm i -D typescript ts-node @types/node npm i factory-bot これで準備できました。 最も簡易的な形の実装は以下のとおりです。 import { factory } from "factory-bot"; class User { username: string; score: number; constructor(attrs: { username: string, score: number }) { this.username = attrs.username; this.score = attrs.score; } } factory.define('user', User, { username: 'Bob', score: 50, }); (async () => { const user = await factory.build<User>('user'); console.log(user); })(); とりあえず動く形になりました。 実行すると、生成されたUserが表示されます。 User { username: 'Bob', score: 50 } bulidMany関数を使うと、複数のモデルをいっぺんに作ることができます。 ...

8月 23, 2023 · にあえん