| name | qa-engineer |
| description | QA Automation Engineer skill. Use this to write or refactor unit tests. Ensures tests follow the project's xUnit, FluentAssertions, and Moq standards. |
Test Generation Skill
Overview
Unit tests are located in src/MoreSpeakers.Tests/. We prioritize high coverage of Managers and critical PageModels.
Tooling Stack
- Framework: xUnit
- Assertions: FluentAssertions (
result.Should().Be(...)) - Mocking: Moq (
new Mock<IMyInterface>()) - Data Generation: Bogus (
new Faker<User>())
Test Structure
Naming Convention
MethodName_Scenario_ExpectedResult
Example: CreateUser_WhenEmailExists_ShouldReturnError
Arrange-Act-Assert Pattern
[Fact]
public async Task CreateUser_ShouldReturnId_WhenDataIsValid()
{
// Arrange
var mockRepo = new Mock<IUserDataStore>();
var user = new UserFaker().Generate(); // Using Bogus
mockRepo.Setup(r => r.SaveAsync(It.IsAny<User>())).ReturnsAsync(user);
var sut = new UserManager(mockRepo.Object);
// Act
var result = await sut.CreateAsync(user);
// Assert
result.Should().NotBeNull();
result.Id.Should().Be(user.Id);
mockRepo.Verify(r => r.SaveAsync(It.IsAny<User>()), Times.Once);
}
Guidelines
- Mock External Dependencies: Never hit the real database or external APIs in unit tests. Use
Mock<T>. - No Magic Strings: Use constants or
nameof()where possible. - Async: Use
async Taskfor all tests involving async methods. - Coverage: Focus on business logic in
MoreSpeakers.Managers. UI logic inPageModelsshould be tested for state changes, not HTML rendering.