7

我有以下 .dpr

program TPWDDBManager;
{

  Delphi DUnit Test Project
  -------------------------
  This project contains the DUnit test framework and the GUI/Console test runners.
  Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
  to use the console test runner.  Otherwise the GUI test runner will be used by
  default.

}

{$IFDEF CONSOLE_TESTRUNNER}
{$APPTYPE CONSOLE}
{$ENDIF}

uses
  DUnitTestRunner,
  TestuTPWDDBManager in 'TestuTPWDDBManager.pas';

{$R *.RES}

begin
  DUnitTestRunner.RunRegisteredTests;
end.

和以下单位:

unit TestuTPWDDBManager;
{

  Delphi DUnit Test Case
  ----------------------
  This unit contains a skeleton test case class generated by the Test Case Wizard.
  Modify the generated code to correctly setup and call the methods from the unit
  being tested.

}

interface

uses TestFramework;

type
  // Test methods for class TPWDDBManager

  TestTPWDDBManager = class(TTestCase)
  strict private
  public
    procedure SetUp; override;
    procedure TearDown; override;
  published
    procedure TestUpdateVersion;
    procedure TestGetPWD;
    procedure TestChangePWD;
    procedure TestReset;
    procedure TestIsReset;

  end;

  Idlg = interface(IInvokable)
    ['{E369D075-E3CA-4BB3-896C-0D623DE5798F}']

  end;

implementation

uses SysUtils,Delphi.Mocks;

procedure TestTPWDDBManager.SetUp;
var
  FMessageDLG : TMock<IDlg>;
begin
end;

procedure TestTPWDDBManager.TearDown;
begin
end;

procedure TestTPWDDBManager.TestGetPWD;
begin
  // TODO: Validate method results
end;

procedure TestTPWDDBManager.TestIsReset;
begin
end;

procedure TestTPWDDBManager.TestChangePWD;
begin
end;

procedure TestTPWDDBManager.TestReset;
begin
end;

procedure TestTPWDDBManager.TestUpdateVersion;
begin

end;

initialization
  // Register any test cases with the test runner
  RegisterTest(TestTPWDDBManager.Suite);
end.

当我编译时,我收到几个警告,例如:

[DCC 警告] W1029 C++ 将无法访问具有相同参数的重复构造函数 'TExpectation.CreateAfter' [DCC 警告] W1029 将无法从 C++ 访问具有相同参数的重复构造函数 'TExpectation.CreateAfterWhen' [DCC 警告] W1029 重复构造函数 'TExpectation。 C++ 无法访问具有相同参数的 CreateAtLeastOnce'

但是如果我删除该行FMessageDLG : TMock<IDlg>;,那么警告就会消失

知道如何解决这个问题吗?

4

2 回答 2

7

Delphi 项目中的 Delphi Mocks 和 C++ Compatibility Compiler 标志相互不兼容。只需在编译器设置中关闭 C++ 兼容性选项即可。请记住,Delphi 有多种用途。这个警告在某些使用场景中是有用的,但在大多数 delphi 用户的日常工作中却没有。您可以禁用警告。

{$WARN DUPLICATE_CTOR_DTOR OFF} 

根据需要添加到您的 PROJECT (.dpr) 范围或单元范围以进行修复。

于 2018-08-27T14:46:57.610 回答
4

警告的意思正是它所说的。如果您对 C++ 兼容性不感兴趣,则只需禁用警告。其他任何事情都需要更改 TExpectation 的定义,以便为其提供因参数列表而异的构造函数,而不仅仅是名称。

于 2013-11-10T13:14:53.503 回答