--- id: AIDotNet/MoYuCode/test-generator version: "45ce5749" license: MIT install: manual updated: 2026-01-28 --- # test-generator — Test Generator creates complete test suites spanning unit tests, integration tests, and end-to-end scenarios with mocking and edge case handling. It supports Jest, Vitest, pytest, and xUnit, letting you quickly scaffold thorough test coverage for your codebase. Publisher: AIDotNet · Stars: 84 · Updated: 2026-01-28 Install (manual): `git clone https://github.com/AIDotNet/MoYuCode` ## SKILL.md # Test Generator Skill ## Description Generate comprehensive test suites with unit tests, integration tests, mocks, and edge case coverage. ## Trigger - `/test` command - User requests test generation - User needs test coverage ## Prompt You are a testing expert that creates comprehensive test suites. ### Jest/Vitest Unit Tests (TypeScript) ```typescript import { describe, it, expect, vi, beforeEach } from 'vitest'; import { UserService } from './UserService'; import { UserRepository } from './UserRepository'; // Mock the repository vi.mock('./UserRepository'); describe('UserService', () => { let userService: UserService; let mockRepository: jest.Mocked; beforeEach(() => { mockRepository = new UserRepository() as jest.Mocked; userService = new UserService(mockRepository); vi.clearAllMocks(); }); describe('createUser', () => { it('should create a user with valid data', async () => { // Arrange const userData = { email: 'test@example.com', name: 'Test User' }; const expectedUser = { id: '123', ...userData, createdAt: new Date() }; mockRepository.create.mockResolvedValue(expectedUser); // Act const result = await userService.createUser(userData); // Assert expect(result).toEqual(expectedUser); expect(mockRepository.create).toHaveBeenCalledWith(userData); expect(mockRepository.create).toHaveBeenCalledTimes(1); }); it('should throw error for duplicate email', async () => { // Arrange const userData = { email: 'existing@example.com', name: 'Test' }; mockRepository.create.mockRejectedValue(new Error('DUPLICATE_EMAIL')); // Act & Assert await expect(userService.createUser(userData)) .rejects.toThrow('DUPLICATE_EMAIL'); }); it('should validate email format', async () => { // Arrange const invalidData = { email: 'invalid-email', name: 'Test' }; // Act & Assert await expect(userService.createUser(invalidData)) .rejects.toThrow('INVALID_EMAIL'); }); }); describe('getUserById', () => { it('should return user when found', async () => { const user = { id: '123', email: 'test@example.com', name: 'Test' }; mockRepository.findById.mockResolvedValue(user); const result = await userService.getUserById('123'); expect(result).toEqual(user); }); it('should return null when user not found', async () => { mockRepository.findById.mockResolvedValue(null); const result = await userService.getUserById('nonexistent'); expect(result).toBeNull(); }); }); }); ``` ### pytest (Python) ```python import pytest from unittest.mock import Mock, patch from user_service import UserService class TestUserService: @pytest.fixture def mock_repository(self): return Mock() @pytest.fixture def user_service(self, mock_repository): return UserService(mock_repository) def test_create_user_success(self, user_service, mock_repository): # Arrange user_data = {"email": "test@example.com", "name": "Test User"} expected = {"id": "123", **user_data} mock_repository.create.return_value = expected # Act result = user_service.create_user(user_data) # Assert assert result == expected mock_repository.create.assert_called_once_with(user_data) def test_create_user_duplicate_email(self, user_service, mock_repository): mock_repository.create.side_effect = ValueError("DUPLICATE_EMAIL") with pytest.raises(ValueError, match="DUPLICATE_EMAIL"): user_service.create_user({"email": "existing@example.com"}) @pytest.mark.parametrize("invalid_email", [ "invalid", "@example.com", "test@", "", ]) def test_validate_email_invalid(self, user_service, invalid_email): with pytest.raises(ValueError, match="INVALID_EMAIL"): user_service.create_user({"email": invalid_email, "name": "Test"}) ``` ### xUnit (C#) ```csharp public class UserServiceTests { private readonly Mock _mockRepository; private readonly UserService _userService; public UserServiceTests() { _mockRepository = new Mock(); _userService = new UserService(_mockRepository.Object); } [Fact] public async Task CreateUser_WithValidData_ReturnsUser() { // Arrange var userData = new CreateUserDto { Email = "test@example.com", Name = "Test" }; var expectedUser = new User { Id = Guid.NewGuid(), Email = userData.Email }; _mockRepository.Setup(r => r.CreateAsync(It.IsAny())) .ReturnsAsync(expectedUser); // Act var result = await _userService.CreateUserAsync(userData); // Assert Assert.Equal(expectedUser.Email, result.Email); _mockRepository.Verify(r => r.CreateAsync(It.IsAny()), Times.Once); } [Theory] [InlineData("")] [InlineData("invalid")] [InlineData("@example.com")] public async Task CreateUser_WithInvalidEmail_ThrowsValidationException(string email) { var userData = new CreateUserDto { Email = email, Name = "Test" }; await Assert.ThrowsAsync( () => _userService.CreateUserAsync(userData)); } } ``` ## Tags `testing`, `unit-tests`, `integration-tests`, `tdd`, `quality-assurance` ## Compatibility - Codex: ✅ - Claude Code: ✅ [View on SkillFed](https://skillfed.io/AIDotNet/MoYuCode/test-generator) · [View on GitHub](https://github.com/AIDotNet/MoYuCode)