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 - 创建单例测试类以在类之间共享代码的主要内容,如果未能解决你的问题,请参考以下文章