delphi - 如何使用 DUnit 测试私有(private)方法?

标签 delphi unit-testing dunit

我有一个类,正在使用 DUnit 对其进行单元测试。 它有许多方法,一些公共(public)方法和私有(private)方法。

type
  TAuth = class(TDataModule)
  private
    procedure PrivateMethod;
  public
    procedure PublicMethod;
  end;

为了为此类编写单元测试,我必须公开所有方法。

是否有不同的方法来声明私有(private)方法,以便我仍然可以测试它们,但它们不是公开的?

最佳答案

您不需要将它们公开。 protected 就可以了。然后,您可以对类进行子类型化以进行单元测试并显示 protected 方法。示例:

type
  TAuth = class(TDataModule)
  protected
    procedure MethodIWantToUnitTest;
  public
    procedure PublicMethod;
  end;

现在您可以为单元测试创​​建子类型:

interface

uses
  TestFramework, Classes, AuthDM;

type
  // Test methods for class TAuthDM
  TestAuthDM = class(TTestCase)
     // stuff
  end;

  TAuthDMTester = class(TAuthDM)
  public
    procedure MethodIWantToUnitTestMadePublic;
  end;

implementation

procedure TAuthDMTester.MethodIWantToUnitTestMadePublic;
begin
  MethodIWantToUnitTest;
end;

但是,如果您想要进行单元测试的方法与数据模块的关系如此密切,以至于除了私有(private)之外,其他任何东西都是不安全的,那么您确实应该考虑重构这些方法,以便隔离需要的代码要进行单元测试以及访问数据模块内部的代码。

关于delphi - 如何使用 DUnit 测试私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/422379/

相关文章:

performance - Delphi如何更快地获取网络驱动器目录

c++ - Qt -Timers 只能用于以 QThread 启动的线程

unit-testing - 模拟 (Moq) 对象列表 - 最佳实践/简化

Delphi 7、DUnit 和 FastMM 错误地报告字符串

delphi - 如何在 DPR 范围内访问 delphi 函数

delphi - 如何将电子邮件附件保存到文件

mysql - 提交 MySql + Zeos lib

java - 即使所有字段都相同,地址相等也会失败

delphi - 什么可能导致编译器不产生控制台输出

delphi - TIdHTTPServer 在我的 DUnit 测试中激活它时引发 EThread 错误 6