All checks were successful
Caddy Manager CI build / docker (push) Successful in 1m16s
3.8 KiB
3.8 KiB
CaddyManager Tests
This project contains comprehensive unit tests for the CaddyManager application.
Test Structure
The tests are organized to mirror the main project structure:
Services Tests
- CaddyConfigurationParsingService: Tests for parsing Caddyfile content and extracting hostnames, reverse proxy targets, and ports
- CaddyService: Tests for managing Caddy configuration files (CRUD operations)
- ConfigurationsService: Tests for configuration management and dependency injection
- DockerService: Tests for Docker container management functionality
Models Tests
- CaddyConfigurationInfo: Tests for configuration information model
- CaddyOperationResponse: Tests for operation response model
- CaddyDeleteOperationResponse: Tests for delete operation response model
- CaddySaveConfigurationRequest: Tests for save configuration request model
Configuration Tests
- CaddyServiceConfigurations: Tests for Caddy service configuration class
- DockerServiceConfiguration: Tests for Docker service configuration class
Test Utilities
- TestHelper: Common utilities for creating test data, temporary files, and configurations
Running Tests
Run all tests
dotnet test
Run tests with coverage
dotnet test --collect:"XPlat Code Coverage" --settings coverlet.runsettings
Run specific test class
dotnet test --filter "ClassName=CaddyServiceTests"
Run tests with verbose output
dotnet test --verbosity normal
Test Coverage
The project is configured to generate code coverage reports in multiple formats:
- OpenCover
- Cobertura
- JSON
- LCOV
- TeamCity
- HTML
Coverage reports exclude:
- Test projects (
[*.Tests]*) - Program entry points (
[*]*.Program) - Migration files (
[*]*Migrations*) - Generated code (marked with appropriate attributes)
Test Frameworks and Libraries
- xUnit: Primary testing framework
- FluentAssertions: For readable assertions
- Moq: For mocking dependencies
- Coverlet: For code coverage analysis
Test Patterns
The tests follow these patterns:
Arrange-Act-Assert (AAA)
All tests use the AAA pattern for clarity:
[Fact]
public void Method_Condition_ExpectedResult()
{
// Arrange
var input = "test input";
// Act
var result = service.Method(input);
// Assert
result.Should().Be("expected output");
}
Theory Tests
For testing multiple scenarios:
[Theory]
[InlineData("input1", "output1")]
[InlineData("input2", "output2")]
public void Method_WithVariousInputs_ReturnsExpectedOutputs(string input, string expected)
{
// Test implementation
}
Mocking
Dependencies are mocked using Moq:
var mockService = new Mock<IService>();
mockService.Setup(x => x.Method(It.IsAny<string>())).Returns("mocked result");
Test Data
Common test data is provided through the TestHelper class:
- Sample Caddyfile configurations
- Temporary file and directory creation
- Configuration builders
Best Practices
- Test Naming: Use descriptive names that indicate the method being tested, the condition, and the expected result
- Single Responsibility: Each test should verify one specific behavior
- Independence: Tests should not depend on each other and should be able to run in any order
- Cleanup: Use
IDisposableor cleanup methods to remove temporary resources - Readable Assertions: Use FluentAssertions for more readable test assertions
- Mock Verification: Verify that mocked methods are called as expected when relevant
Continuous Integration
These tests are designed to run in CI/CD environments and include:
- Fast execution times
- No external dependencies (except for Docker integration tests which are skipped)
- Comprehensive coverage of business logic
- Clear failure messages for debugging