我正在尝试为一个简单的工厂类编写单元测试,该工厂类创建几个可能的实现对象之一并将其作为接口(interface)引用返回。
DUnit 有一个内置过程 CheckIs(AObject: TObject; AClass: TClass; msg: string)
,如果对象的类基于其名称和它接受的参数,则测试应该失败类型与预期不匹配。唯一的问题是它需要对象引用而不是接口(interface)引用。
因此,我尝试使用 CheckTrue
并在测试主体中执行比较,但我不像 C# 那样熟悉 Delphi 的类型检查支持。
我知道 is
运算符是不可能的,因为它只适用于对象引用。
CheckTrue(LMyInterfaceReference {comparison here} TMyClass);
有什么建议吗?
顺便说一句,我使用的是 Delphi 2009,因此我无法访问 2010+ 中添加的新 RTTI 支持。
最佳答案
我想知道为什么你必须测试这个......也许你真的不需要。
但是,如果必须了解接口(interface)的底层对象,那么您有两种选择:
- 向接口(interface)添加一个方法,该方法返回底层对象(只是一个 TObject),并在每个类中通过返回 self 来实现此方法。
- 稍微修改一下,例如使用这个 Interface to object例行公事。
关于delphi - 如何确定接口(interface)的实现对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5196682/