- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
或者使用其他设计模式更好?
最佳答案
前几天回复过类似问题here, mocking a Singleton 。原始帖子适用于 C#.Net 关于模拟单例行为的内容,但仍应适用。
关于单例模式,它本身并没有什么问题——在很多情况下我们希望集中逻辑和数据。然而,单例和静态类之间有很大的区别。将您的单例构建为静态类硬编码,以实现应用程序中的每个使用者 - 这使得单元测试非常困难!
您想要做的是为您的单例定义一个接口(interface),公开供您的消费者使用的方法。反过来,无论是谁实例化您的消费者,都会传递对实现类的引用[通常这是您的应用程序,或者如果您熟悉依赖注入(inject)\控制反转,则为容器]。
正是这个框架,无论谁实例化消费者,都负责确保只有一个实例在 float 。从静态类到接口(interface)引用实际上并不是那么大的飞跃[如上面的链接所示],你只是失去了全局可访问实例的便利 - 我知道我知道,全局引用非常诱人,但卢克转过身去黑暗面,你也可以!
一般来说,最佳实践建议避免静态引用,并鼓励针对接口(interface)进行编程。请记住,仍然可以在这些约束下应用单例模式。遵循这些准则,您应该没有问题对您的工作进行单元测试:)
希望这有帮助!
<小时/>singleton != public static class,而不是singleton == single instance
关于delphi - 如何使用 DUnit 测试 Singleton 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1626556/
如何从 IDE 运行 TestCase? 我创建了一个新项目,具有一个简单的表单: unit Unit1; interface uses Windows, Messages, SysUtils,
目前我在 DUnit 中使用 2 级测试层次结构(测试项目 -> 测试用例 -> 测试方法;请参见下面的示例)。是否可以引入第三级甚至更多级别? 最佳答案 我通过在“SuitePath”中添加反斜杠来
有没有办法比较两个文本文件,如果它们在 dunit 中不相同,则显示差异? 最简单的开始是将它们读取到 TStringList,但是比较两个文本文件的代码要复杂得多,DUnitGui 中的 gui 不
如何在应用程序控制台的 DUnit 中确定哪些层次结构将被测试和未测试?当我在 GUI 模式下工作时,我可以检查和取消选中层次结构。 最佳答案 ITest DUnit 中的接口(interface)包
对于集成测试,我创建了一个 DUnit 测试套件,该套件为第三方组件(消息代理)的每个版本运行一次。不幸的是,由于被测试组件的某些版本中存在已知错误,某些测试总是失败。 这意味着测试套件永远不会 10
我有一个 dunit 测试项目,我正在尝试在控制台模式下运行它。当我执行该项目时,它会运行两次(它只打开一个控制台窗口,我看到它执行了两次测试),并且比在 GUI 模式下运行它时花费的时间要多得多。有
在 DUnit 中,SetUp 和 TearDown 分别在执行每个测试方法之前(和之后)调用。 在 SetUp 中,我创建了一个从文件加载数据的对象。这很慢,尤其是当我有很多测试时。 在执行所有测试
我使用的是 Delphi 7。 我是 DUnit 的新手,我的疑问是我可以使用 DUnit 编写什么样的测试用例以及如何编写(这对我来说非常重要)。 是否可以为特定的按钮单击事件编写测试用例?因为在这
DUnit 通常的工作方式是编写一些已发布的方法,DUnit 将它们作为测试运行。我想做的有点不同。我想在运行时基于数据创建测试。我正在尝试测试一个处理输入文件以创建输出文件的特定模块。我有一组测试输
翻遍了Delphi安装的文件后,我发现了一个文件 “C:\Program Files\Embarcadero\RAD Studio\7.0\ObjRepos\en\UnitTestFrameworks
我正在测试用 CEF4Delphi 创建的一些进程通过 DUnit 在我的应用程序中。 以下是重现该问题的 MCVE: unit MyUnit; interface {$I cef.inc} uses
你会推荐什么工具在 Delphi 中进行单元测试。 我使用 FastMM4 进行内存泄漏测试。 和 MadExcept,两者都是规则,但它不能帮助我测试我的程序中的逻辑。 我想要一些替代品,所以不要急
TGUITestRunner 表单表示 DUnit 测试结果,由 GUITestRunner.RunTest 过程创建一次: procedure RunTest(test: ITest); begin
您可以使用 TAbstractTest.Status 过程在测试期间在 DUnit GUI 中显示一些调试消息。 但是当我运行这组测试时,我只能看到上次执行的测试的状态消息。我可以在不选择要运行的每个
我正在使用Hudson作为 Delphi 2010 项目的 CI 服务器。 XMLTestRunner.pas 单元将 DUnit 测试结果写入 xml 文件,hudson xUnit 插件使用该文件
我正在比较 DUnit 中的一些货币值,但它在我的机器上根本不起作用(在其他机器上起作用,但在我的机器上不起作用)。 一个例子: CheckEquals(16.65, SomeCurrencyFiel
如何为 Delphi DUnit 中的单元测试提供数据?例如,在 PHP 中,您可以执行以下操作: public function URLProvider() { return [
我正在使用 DUnit 和 FastMM 来捕获未完成的内存块,但似乎有一个错误。我不知道它是在 FastMM、DUnit 还是在 Delphi 本身中,但这里有: 当我的测试用例有内部字符串时,测试
下面的代码工作正常, calc... 生成异常,将其注释掉或更改 calc... 以不引发异常并且测试失败。 StartExpectingException(exception); calcM
嘿,我在 Delphi XE3 中的单元测试有问题,我有一个由 1 个 MDIForm 和分配的 MDIChild 表单组成的项目,那么问题是,当我在 MDIChild 表单上运行测试时,我收到此错误
我是一名优秀的程序员,十分优秀!