Ocunit - 创建单例测试类以在类之间共享代码

Posted

技术标签:

【中文标题】Ocunit - 创建单例测试类以在类之间共享代码【英文标题】:Ocunit - Creating singleton test class to share code among classes 【发布时间】:2012-07-18 13:01:35 【问题描述】:

我刚开始为我的代码编写单元测试用例。 在编写时,我只是吸收了许多测试用例类使用一些通用代码,并且在类之间需要一个通用变量。

所以我决定创建一个单例类来保存所有这些值。这个单例类将在其中继承。

所以我的问题是可以创建一个单例测试类。 ?

注意:我创建了一个单例,但它根本不起作用。

【问题讨论】:

【参考方案1】:

OCUnit 与其他 xUnit 框架共享相同的架构。要运行一个测试用例,它

    实例化一个测试用例对象。 (它通常被称为“测试夹具”,其中夹具具有可用于多个测试的其他对象的 ivars。) 调用设置 运行一种特定的测试方法 调用拆解

对于您想要的公共变量,将其定义为 ivar。然后在-setUp中初始化它。如果之后需要显式清理,请在 -tearDown 中执行此操作。

避免在测试之间共享对象非常重要,因为每个测试都应该有自己一致的通过/失败行为。共享对象会污染这一点,从而在您的测试之间创建潜在的依赖关系。由于单例是共享对象的常用方式,因此它们通常与单元测试策略背道而驰。

有关使用 Objective-C 或 Swift 在 Xcode 中进行单元测试(特别是测试驱动开发)的分步示例,请参阅https://qualitycoding.org/tdd-kata/

【讨论】:

非常感谢您的回复,但我有一个问题,比如假设考虑在开始时访问服务以从服务器中提取一些 url,我必须使用这些 url 来测试我的其余应用程序服务。在这种情况下,考虑我已经在不同的类中编写了它。根据您的回答,我每次都必须点击服务器来提取网址,而且我是否必须在每个课程中再次点击服务器。 ?或者你能建议我一个很好的方法来关注这个吗, @nik 这取决于您要执行的测试类型:您要测试您的客户端还是您的服务?对于客户端测试,我坚持真正的单元测试,根本不会触及真正的服务。避免真正的服务调用使测试保持快速和一致。考虑如何更改您的设计以隔离服务。 (TDD 通过从测试向后设计代码来避免此类问题,而不是尝试设计测试以适应现有代码。)【参考方案2】:

是的,在这里我发现我们不能创建一个继承 sentesting 的单例类。

我们只能创建继承自 NSObject 的单例。

【讨论】:

以上是关于Ocunit - 创建单例测试类以在类之间共享代码的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个共享目录以在集成测试和小部件测试之间共享代码?

如何从另一个模块访问测试类以在 junit 测试中使用?

单例模式

php 创建一个新类以在app / Macros / Routing中注册Route宏

装饰类以在调用 __get__() 时运行一段代码

在 OCUnit 中使用属性是不是安全?