Inhaltsverzeichnis
Testiranje
Testna strategija in ogrodje za WvdS FPC RAD Studio.
Vrste testov
| Vrsta | Obseg | Orodja | Izvajanje |
|---|---|---|---|
| Enotni testi | Posamezne funkcije | FPCUnit | Lokalno |
| Integracijski testi | Sodelovanje komponent | FPCUnit | Lokalno |
| E2E testi | Celotna razširitev | VS Code Test Runner | CI |
Enotni testi
Struktura
sources/ ├── extensions/ │ └── wvds.vscode.build/ │ ├── pas/ │ │ ├── Build.Service.pas │ │ └── Build.Models.pas │ └── tests/ │ ├── Build.Service.Tests.pas │ └── Build.Models.Tests.pas
Testno ogrodje
unit Build.Service.Tests; {$mode objfpc}{$H+} interface uses TestFramework, Build.Service, Build.Models; type TBuildServiceTest = class(TTestCase) published procedure TestValidatePath_ValidPath_ReturnsTrue; procedure TestValidatePath_InvalidPath_ReturnsFalse; procedure TestGenerateCommand_DebugMode_IncludesDebugFlags; end; implementation procedure TBuildServiceTest.TestValidatePath_ValidPath_ReturnsTrue; var Error: string; begin CheckTrue(ValidateBuildPath('%USERPROFILE%\Projects\MyApp', Error)); CheckEquals('', Error); end; procedure TBuildServiceTest.TestValidatePath_InvalidPath_ReturnsFalse; var Error: string; begin CheckFalse(ValidateBuildPath('', Error)); CheckNotEquals('', Error); end; procedure TBuildServiceTest.TestGenerateCommand_DebugMode_IncludesDebugFlags; var Config: TWvdSBuildConfig; Command: string; begin Config.Mode := bmDebug; Config.ProjectPath := 'test.lpr'; Command := GenerateBuildCommand(Config); CheckTrue(Pos('-g', Command) > 0, 'Debug flag missing'); CheckTrue(Pos('-O0', Command) > 0, 'No-optimization flag missing'); end; initialization RegisterTest(TBuildServiceTest.Suite); end.
Konvencije poimenovanja
Test{Funkcionalnost}_{Scenarij}_{PričakovanRezultat}
Primeri:
TestValidatePath_ValidPath_ReturnsTrue
TestValidatePath_EmptyString_ReturnsFalse
TestGenerateCommand_ReleaseMode_IncludesOptimization
Zagotavljanje testabilnosti
Zasnova storitev
// TESTABILNO - Brez odvisnosti od UI function ValidateName(const AName: string; out AError: string): Boolean; // NI TESTABILNO - UI v logiki procedure ValidateAndShowError(const AName: string);
Vstavljanje odvisnosti
// TESTABILNO - Odvisnost vstavljena function ProcessFile(const APath: string; AFileReader: IFileReader): TResult; // NI TESTABILNO - Trdo kodirana odvisnost function ProcessFile(const APath: string): TResult; begin Content := ReadFile(APath); // Ni mogoče nadomestiti z lažnjakom end;
Lažnjaki (Mocking)
type TMockFileReader = class(TInterfacedObject, IFileReader) FContent: string; function ReadFile(const APath: string): string; end; function TMockFileReader.ReadFile(const APath: string): string; begin Result := FContent; // Vnaprej določena vsebina end; procedure TProcessorTest.TestProcessFile_ValidContent_Succeeds; var Mock: TMockFileReader; Processor: TProcessor; begin Mock := TMockFileReader.Create; Mock.FContent := 'test content'; Result := ProcessFile('any.txt', Mock); CheckEquals('expected output', Result); end;
Integracijski testi
unit Integration.BuildPipeline.Tests; procedure TBuildPipelineTest.TestFullBuild_ConsoleApp_ProducesExe; var Project: TWvdSProject; Result: TWvdSBuildResult; begin // Priprava Project := CreateTestProject(ptConsole); // Izvedba Result := BuildProject(Project); // Preverjanje CheckEquals(bsSuccess, Result.Status); CheckTrue(FileExists(Result.OutputPath)); // Čiščenje DeleteTestProject(Project); end;
E2E testi
Testiranje VS Code razširitev z @vscode/test-electron:
// test/extension.test.js (generirano iz Pascal) const vscode = require('vscode'); const assert = require('assert'); suite('Extension Test Suite', () => { test('Build command exists', async () => { const commands = await vscode.commands.getCommands(); assert.ok(commands.includes('wvds.build.run')); }); test('Build command executes', async () => { await vscode.commands.executeCommand('wvds.build.run'); // Preveri, da izhodni kanal vsebuje pričakovano sporočilo }); });
Izvajanje testov
Lokalno
# Enotni testi wvds-test unit # Integracijski testi wvds-test integration # Vsi testi wvds-test all
CI
test: runs-on: ubuntu-latest steps: - name: Run Unit Tests run: wvds-test unit --report junit - name: Run E2E Tests run: wvds-test e2e --report junit - name: Upload Results uses: actions/upload-artifact@v3 with: name: test-results path: binaries/logs/test-*.xml
Pokritost kode
wvds-test unit --coverage # Generira: # binaries/logs/coverage.html # binaries/logs/coverage.json
Minimalna pokritost:
- Storitve: 80%
- Modeli: 90%
- Pomožne funkcije: 70%
Glejte tudi
Zuletzt geändert: dne 29.01.2026 ob 22:23