问题标签 [pascalmock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
933 浏览

delphi - 如何在 PascalMock 中模拟具有开放数组参数的方法?

我目前正在开始进行单元测试和模拟,我偶然发现了以下方法,我似乎无法为其制造一个有效的模拟实现:

TImplContextID只是整数的类型别名)

这是我走了多远:

但我无法弄清楚我应该如何模拟 open array parameter AArgs。有任何想法吗?

此外,是否有一种更简单的方法来返回out-parameterAInstance并使用@-notation 作为TGUID-typed 参数(本质上是记录,即值类型)的正确方法?

是否可以使用当前版本的 PascalMock 来模拟此方法?


更新 2:为了清楚起见,我现在删减了问题文本。最初它包含以下模拟方法的错误实现,这是梅森的回复所指的:

在此编译器抱怨.ReturnsOutParams([AInstance])说“变量类型数组构造函数中的参数类型错误。”。

0 投票
3 回答
665 浏览

unit-testing - 在使用模拟对象时,如何防止我的单元测试需要有关实现内部的知识?

我仍处于关于单元测试的学习阶段,特别是关于模拟(我正在使用PascalMockDUnit框架)。我现在偶然发现的一件事是,我找不到将测试类/接口的实现细节硬编码到我的单元测试中的方法,而且感觉不对……

例如:我想测试一个类,它实现了一个非常简单的接口,用于读取和写入应用程序设置(基本上是名称/值对)。呈现给消费者的界面完全不知道值的实际存储位置和方式(例如注册表、INI 文件、XML、数据库等)。自然地,访问层是由另一个不同的类实现的,该类在构造时被注入到测试类中。我为此访问层创建了一个模拟对象,现在我能够完全测试接口实现类,而无需实际读取或写入任何注册表/INI 文件/任何内容。

但是,为了确保模拟对象在被测试类访问时的行为与真实对象完全一样,我的单元测试必须通过非常明确地定义预期的方法调用和被测类预期的返回值来设置模拟对象。这意味着如果我必须更改访问层的接口或测试类使用该层的方式,我还必须更改内部使用该接口的类的单元测试,即使接口我实际上正在测试的课程根本没有改变。这是我在使用模拟时必须忍受的事情,还是有更好的方法来设计可以避免这种情况的类依赖关系?

0 投票
0 回答
56 浏览

mocking - 如何使用需要变体的 PascalMock 传递/返回记录?

使用简单数据类型或对象时,带有 Delphi 2010 的 PascalMock 可以正常工作。然而,有了记录,就有了麻烦。

TMock.Returns需要一个数组TVarRec,所以我不能只传入一个。

有一个将其转换为指针的示例,但由于它代表一个值,这对我来说没有意义。当该记录将在某些函数之间传递时,最后我将取回具有不同地址的副本。

我尝试的另一件事是将字节级别的记录复制到Variantusing 中VarArrayCreate。当馈送到 PascalMock 时,这神秘地导致错误转换为整数。当我刚刚传入时,我得到了同样的错误Variant(TBytes.Create(1, 2, 3))。没有明确的情况 to Variant,我再次得到一个整数(指针?)。

当然,我总是可以完全手动编写一个模拟,但考虑到 PascalMock 的年龄,我希望这是一个已解决的问题。请注意,我什至没有使用最新AutoMockIntf添加的内容。是否有适当的方法将任何记录转换为 PascalMocks 可以使用的 Variant 或从 Variant 转换?或者在这种情况下是否有更好的方法来处理记录?

这是我想要实现的一些示例代码:

0 投票
1 回答
129 浏览

delphi - 如何使用 PascalMock 返回 var 参数

我正在使用 PascalMock ( http://sourceforge.net/projects/pascalmock/ ) 在我的 DUnit 单元测试中模拟各种接口。

我熟悉如何处理参数和返回值,但我不明白如何编写 var 参数。

例如,要模拟一个接口版本,如果 TINiFile.ReadSections,我尝试过:

然后使用以下方法设置期望:

但这并没有返回我放入 Sections 的值。我尝试了各种其他排列,但显然我错过了一些东西。互联网上的例子似乎很少。

使用 PascalMock 返回 var 参数的正确方法是什么?