Educational test system for teachers and students, which can also be used in corporate training scenarios. This application allows teachers to create tests and manage students (colleagues) and their results; students can take tests and view their achievements.
The application is built using the following technologies:
- ASP.NET Core
- Blazor for user interface
- EF Core for data access
- Identity for user management
- SQL Server as the database
- xUnit for unit testing
This stack ensures a robust, scalable, and maintainable solution and requires no / minimum JS for UI development and support.
Data diagrams (.png) and User Guide (.pdf) are available in the repository for better understanding of the application and its usage.
Future improvements list is available in TODO.txt file, showing possible next steps for the app development.
The application follows a layered architecture with a strong focus on clear responsibility boundaries and safe data access.
Key design decisions:
- Service-based layer with clearly separated services and DTOs for UI communication
- Direct use of EF Core DbContext inside services (Repository layer intentionally omitted in favor of simplicity and performance)
- Instead of sharing DbContext instances across services and components, the application uses IDbContextFactory to create short-lived DbContext instances. This approach prevents concurrency exceptions and works more stable in Blazor Server.
- Identity roles: Admin / User (clean roles for authentication and authorization)
- Business roles: Teacher / Student (used only to access business functionality)
The application supports the following main flows, which can be accessed based on user roles:
- Teacher adds new tests and questions, manages students
- Student passes test and views results to complete learning
- Admin manages users and adds roles to them, if necessary
- Users can use some limited functionality without roles
This functionality can be easily extended in the future thanks to the flexible layered structure of the application.
The project is covered with xUnit tests for the service layer.
AI tools were used to help design test cases, edge conditions, and coverage scenarios, while all tests were manually reviewed, adapted, and validated against real application behavior. This approach helped to improve test consistency without compromising code quality.
- Clone repository
- Set connection string in appsettings.json
- Apply migrations and run the application
Note: Windows Authentication is used by default for local development. You may change it to SQL authentication if needed.
Email confirmation is required for newly registered users to ensure valid email addresses (only local by default).
Email: admin@example.com Password: Admin123!
This account is created automatically on first run.
At the current stage, the application is intended for local development and demonstration purposes only. Several security-related decisions were made intentionally to simplify development and testing and must be revisited before production use.