All skills
simota avatar

/mint

@95ba0d9
by shingo imotasimota/agent-skills85 stars
15

Generating test data and fixtures. Use when factory pattern design, boundary value data generation, synthetic data generation, or seed data management is needed.

Use this Skill: https://skilld.dev/gh/simota/agent-skills/mint

This session only. Nothing lands on disk.

referencemulti-language.md

≈1.2k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Multi-Language Test Data Support

Purpose: Language-specific factory and fixture patterns. Read when: Generating test data for non-JavaScript/TypeScript projects.


Python

Polyfactory (Pydantic)

from polyfactory.factories.pydantic_factory import ModelFactory
from faker import Faker
from app.models import User, Order

fake = Faker(['ja_JP', 'en_US'])

class UserFactory(ModelFactory):
    __model__ = User

    @classmethod
    def name(cls) -> str:
        return fake.name()

    @classmethod
    def email(cls) -> str:
        return fake.email()

# Usage
user = UserFactory.build()
users = UserFactory.batch(10)
admin = UserFactory.build(role='admin')

factory_boy (Django)

import factory
from factory import fuzzy
from app.models import User, Order

class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = User

    name = factory.Faker('name', locale='ja_JP')
    email = factory.LazyAttribute(lambda o: f'{o.name.lower()}@test.example.com')
    role = 'user'

    class Params:
        admin = factory.Trait(role='admin')
        deleted = factory.Trait(deleted_at=factory.Faker('date_time_this_year'))

class OrderFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Order

    user = factory.SubFactory(UserFactory)
    total = fuzzy.FuzzyDecimal(100, 99999, precision=2)
    status = 'pending'

Hypothesis (Property-Based)

from hypothesis import given, strategies as st, settings

user_strategy = st.fixed_dictionaries({
    'name': st.text(min_size=1, max_size=100),
    'email': st.emails(),
    'age': st.integers(min_value=0, max_value=150),
    'role': st.sampled_from(['user', 'admin', 'moderator']),
})

@given(user=user_strategy)
@settings(max_examples=100)
def test_user_validation(user):
    result = validate_user(user)
    assert isinstance(result, ValidationResult)

Go

gofakeit + Custom Builders

package testdata

import "github.com/brianvoss/gofakeit/v7"

type UserBuilder struct {
    user User
}

func NewUserBuilder() *UserBuilder {
    gofakeit.Seed(42)
    return &UserBuilder{
        user: User{
            ID:    gofakeit.UUID(),
            Name:  gofakeit.Name(),
            Email: gofakeit.Email(),
            Role:  "user",
        },
    }
}

func (b *UserBuilder) Admin() *UserBuilder {
    b.user.Role = "admin"
    return b
}

func (b *UserBuilder) Deleted() *UserBuilder {
    t := time.Now().Add(-24 * time.Hour)
    b.user.DeletedAt = &t
    return b
}

func (b *UserBuilder) Build() User {
    return b.user
}

// Usage
user := NewUserBuilder().Admin().Build()

rapid (Property-Based)

import "pgregory.net/rapid"

func TestUserValidation(t *testing.T) {
    rapid.Check(t, func(t *rapid.T) {
        name := rapid.String().Draw(t, "name")
        age := rapid.IntRange(0, 150).Draw(t, "age")
        user := User{Name: name, Age: age}
        err := user.Validate()
        if err != nil {
            t.Logf("validation error: %v", err)
        }
    })
}

Rust

fake-rs

use fake::{Dummy, Fake, Faker};
use fake::faker::name::en::*;
use fake::faker::internet::en::*;

#[derive(Debug, Dummy)]
struct User {
    #[dummy(faker = "1..1000")]
    id: i32,
    #[dummy(faker = "Name()")]
    name: String,
    #[dummy(faker = "SafeEmail()")]
    email: String,
}

// Usage
let user: User = Faker.fake();
let users: Vec<User> = (0..10).map(|_| Faker.fake()).collect();

proptest

use proptest::prelude::*;

proptest! {
    #[test]
    fn test_user_name_not_empty(
        name in ".{1,100}",
        age in 0u32..150,
    ) {
        let user = User::new(&name, age);
        assert!(!user.name().is_empty());
    }
}

Java

Instancio

import org.instancio.Instancio;
import org.instancio.Select;

// Auto-generate with customization
User user = Instancio.of(User.class)
    .set(Select.field(User::getRole), "admin")
    .set(Select.field(User::getEmail), "admin@test.example.com")
    .create();

// Batch generation
List<User> users = Instancio.ofList(User.class)
    .size(100)
    .create();

jqwik (Property-Based)

@Property
void userValidation(
    @ForAll @StringLength(min = 1, max = 100) String name,
    @ForAll @IntRange(min = 0, max = 150) int age
) {
    User user = new User(name, age);
    assertThat(user.validate()).isNotNull();
}

Library Quick Reference

Language Factory Faker Property-Based
JS/TS Fishery @faker-js/faker fast-check
Python Polyfactory / factory_boy Faker Hypothesis
Go Custom builders gofakeit rapid
Rust Custom + Dummy derive fake-rs proptest
Java Instancio JavaFaker jqwik
Ruby factory_bot Faker Rantly

Source: SKILL.md on GitHub

No alerts5mo4 checks · Risk SAFE
  • Gen Agent Trust Hub5mo

    このスキルはテストデータの生成と匿名化を専門とするエージェントです。型安全なファクトリの設計、境界値テストデータの作成、本番データのPII(個人識別情報)マスキングなど、安全な開発プラクティスを促進する機能を提供します。悪意のあるパターンやセキュリティリスクは確認されませんでした。

  • Socket5mo

    No alerts

  • Snyk5mo

    Risk: LOW · No issues

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 95ba0d9. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 3 days ago.

Activeupdated last month

README badge

README badge for simota/agent-skills/mint