【发布时间】:2015-01-26 00:38:39
【问题描述】:
受到objc.io 上的this 问题的启发,我决定在我的新项目中尝试 BDD。这是我的问题:我想测试MYCredentialStorage 是否以某种方式保留了我要求它存储的凭据,即下次启动应用程序时,我将获得相同的凭据。 MYCredentialStorage 使用钥匙串,所以我可以模拟它并验证 SecItemAdd 或 SecItemUpdate 函数是否被调用,但我不应该测试(或知道)MYCredentialStorage 的私有方法,对吧?
我确信我不是唯一一个面临这个问题的人,所以我征求你的意见,因为我对 BDD 很陌生。
提前谢谢你。
【问题讨论】:
-
查看来自同一 objc.io 问题的另一篇文章 - 依赖注入:objc.io/issue-15/dependency-injection.html。基本上你可以将钥匙串的模拟注入
MYCredentialStorage(但也许你需要为SecItem* 方法创建一个包装器)。 -
我同意@MichałCiuba - 没有通用的方式来表示项目将在您的应用程序执行之间持续存在。如果你要走DI路线,我会照他说的做。如果你不做 DI,我不会羞于嘲笑钥匙串存储或你的私有方法。我会在测试的命名中明确表达期望是什么。
-
谢谢,如果可以的话,我会接受你的两个 cmets 作为答案。我最终使用了构造函数注入和模拟钥匙串。
标签: ios unit-testing bdd xctest ocmock