D'un test à l'autre, les champs sont remis à zéro, mais si je remplace fx:double par class var fx:double, fi conserve sa valeur. Tel que le code est écrit, dans le deuxième test, FAIL est activé par ce que fi=0 sans qu'aucune affectation n'ai jamais été effectuée dans ce sens.

Est-ce que c'est volontaire dans le but de forcer l'utilisation de SetUp et de décourager les tests avec des effets de bords? Est-ce un bogue à signaler?

Le vrai bogue à signaler, est-ce le fait que les champs soient remis à zéro ou le fait que l'ajout de de class var empêche la remise à zéro?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
unit TestCase1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, fpcunit, testutils, testregistry, Dialogs;
 
type
 
  TTestCase1= class(TTestCase)
  protected
    fx:double;
    fi:integer;
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure One;
    procedure Two;
  end;
 
implementation
 
procedure TTestCase1.One;
begin
  fx:=0.5;
  fi:=3;
  IF fi <> 3 THEN
     Fail('Must be 3.');
end;
procedure TTestCase1.Two;
begin
  ShowMessage('fx='+fx.ToString);
  ShowMessage('fi='+fi.ToString);
 
  IF fi <> 3 THEN    //Will fail, fi =0, it has been automatically cleared
     Fail('Must be 3.');
end;
 
procedure TTestCase1.SetUp;
begin
 
end;
 
procedure TTestCase1.TearDown;
begin
 
end;
 
initialization
 
  RegisterTest(TTestCase1);
end.
Nom : FailedTest.png
Affichages : 291
Taille : 20,0 Ko