连续的单元测试失败,虽然他们单独取得成功

问题描述 投票:1回答:2

我有一个单元测试套件,其中当单独执行,它的每一个测试成功。

但是,如果我执行整个套件,一个测试时挂起应该初始化一个单例。如果某个其他单元测试执行后,只挂 - 如果我更改顺序,整个测试套件成功执行。 如果我暂停悬挂单元测试的执行,堆栈跟踪如下: enter image description here

执行挂在声明static let shared = StoreManager()

class StoreManager: NSObject, CalledByDataStoreInStoreManager {
    static let shared = StoreManager() // Instantiate the singleton
// …
}  

其他单元测试之前执行,使检查挂不使用StoreManager单。

我的问题是: 什么可能是第一次测试可以让在第二测试单失败的初始化,虽然这单没有在第一次测试中使用的原因是什么?

swift xcode unit-testing
2个回答
1
投票

所以,显而易见的答案是,有你这是影响你的第二个测试第一测试中出现的副作用。正是这样的副作用是什么,不过,是依赖于两件事情:

  • 什么在第一次测试正在测试
  • 在初始化为StoreManager发生什么

从你的描述,这听起来像第一次测试以某种方式影响到什么,然后在StoreManager初始化使用,当测试是不是你的第二个测试之前运行,这是不会受到影响。


0
投票

解决:副作用,就是BHendricks的答案向我指出,为以下几点: 由于我的应用程序也使用手表,手表会在应用程序委托激活,所推荐的苹果。这是通过调用在WatchSessionManager实例函数来完成,而这个实例的初始化试图初始化,它也试图通过Storemanager是init是独生子。 这创造了一个init周期僵局。

由于我使用一个模拟的应用程序委托单元测试,我现在有手表激活连接会话初始化没有在WatchSessionManager实例的初始化不必要,避免僵局。

© www.soinside.com 2019 - 2024. All rights reserved.