ToolStabil
Test Runner
Unit- und Integrationstests mit Assertions, Mocking, Fixtures und Coverage-Reports.
Features
Assertions
Umfangreiche Assert-API
Mocking
Mocks, Spies, Stubs
Async
Async/Await Support
Coverage
Code-Coverage Reports
Fixtures
Setup/Teardown
Snapshots
Snapshot Testing
Tests schreiben
tests/user_test.velinvelin
use test::{ describe, it, expect, mock }
describe("UserService", || {
it("sollte User erstellen", || {
let service = UserService::new();
let user = service.create("Max", "max@example.com");
expect(user.name).toBe("Max");
expect(user.email).toContain("@");
expect(user.id).toBeDefined();
});
it("sollte bei ungültiger Email fehlschlagen", || {
let service = UserService::new();
expect(|| service.create("Max", "invalid"))
.toThrow("Invalid email");
});
it("sollte async funktionieren", async || {
let user = await UserService::findById("123");
expect(user).not().toBeNull();
});
});Mocking
use test::{ mock, spy }
// Mock erstellen
let mockDb = mock(Database, {
findUser: |id| User { id, name: "Mock User" },
save: |user| Ok(user)
});
// Spy für echte Aufrufe
let emailSpy = spy(EmailService);
service.sendWelcome(user);
expect(emailSpy.send).toHaveBeenCalledWith(user.email);
expect(emailSpy.send).toHaveBeenCalledTimes(1);Tests ausführen
# Alle Tests
velin test
# Bestimmte Datei
velin test tests/user_test.velin
# Mit Pattern
velin test --filter "UserService"
# Mit Coverage
velin test --coverage
# Watch Mode
velin test --watchAssertions
// Gleichheit
expect(value).toBe(expected);
expect(value).toEqual(expected); // Deep equal
// Typen
expect(value).toBeNull();
expect(value).toBeDefined();
expect(value).toBeInstanceOf(User);
// Zahlen
expect(num).toBeGreaterThan(5);
expect(num).toBeLessThanOrEqual(10);
expect(num).toBeCloseTo(3.14, 2);
// Strings
expect(str).toContain("hello");
expect(str).toMatch(/\d+/);
// Arrays
expect(arr).toHaveLength(3);
expect(arr).toContain(item);
// Negation
expect(value).not().toBe(other);