Ios 单元测试电子邮件注册Firebase

Ios 单元测试电子邮件注册Firebase,ios,swift,unit-testing,firebase,firebase-authentication,Ios,Swift,Unit Testing,Firebase,Firebase Authentication,我刚刚被困在一个Firebase项目中,正在复习我的单元测试技能 我使用单元测试来检查在注册时输入无效电子邮件/密码是否正确。这很好 我还想检查在输入有效的详细信息时是否发生了正确的事情。不过,我不希望每次运行此测试时都创建一个新帐户,它只会把我的Firebase数据库弄得乱七八糟 有什么解决办法吗?也许,直接调用delete user方法?这似乎有点过分。您需要使用一个测试虚拟对象AKA Mock来表示检查有效性然后保存的业务逻辑。你如何做到这一点将取决于你是如何构建你的应用程序的,但是如果我

我刚刚被困在一个Firebase项目中,正在复习我的单元测试技能

我使用单元测试来检查在注册时输入无效电子邮件/密码是否正确。这很好

我还想检查在输入有效的详细信息时是否发生了正确的事情。不过,我不希望每次运行此测试时都创建一个新帐户,它只会把我的Firebase数据库弄得乱七八糟


有什么解决办法吗?也许,直接调用delete user方法?这似乎有点过分。

您需要使用一个测试虚拟对象AKA Mock来表示检查有效性然后保存的业务逻辑。你如何做到这一点将取决于你是如何构建你的应用程序的,但是如果我假设验证细节和保存细节是同一个类上的两个不同函数,或者是一个单独的类上的不同函数,那么…在你的单元测试嵌套类中创建一个子类是可以的,它将你的实际类划分为子类,并覆盖相关的保存方法不执行任何操作,或者注册调用了该方法,然后可以在测试中断言该方法。然后,这个新的子类需要作为实例注入到调用类中:您如何做到这一点/它有多容易将取决于您如何构建应用程序。希望在实例化调用类时,可以使用模拟在其上设置属性,作为测试设置的一部分

class LoginCapture {
   var loginChecker = LoginChecker()
   func validateLogin() {
       // business logic
       loginChecker.isLoginValid()
   }
   func saveUser() {
       // business Logic
       loginChecker.saveNewUser()
   }
}
class LoginChecker {
   func isLoginValid() -> Bool {
       // business logic
   }
   func saveNewUser() {
       // business logic that creates firebase record
   }

class myUnitTest: XCTestCase {
   var sut: LoginCapture?
   class LoginCheckerMock: LoginChecker {
      var saveCalled = false
      override func saveNewUser() {
         saveCalled = true
      }
   }
   func setup() {
      sut = LoginCapture()
      sut.loginChecker = LoginCheckerMock()
   }
   func myTest() {
      //  run your test logic.  You can also assertTrue that saveCalled = true

显然,这只是一个想法。您可能需要搜索测试假人、模拟等以及依赖项注入。

我完全忘记了这个问题,现在了解了更多关于单元测试的知识,以及其他任何尝试这样做的人。不要。测试用于测试您编写的代码,而不是第三方库的核心功能。他们应该有自己的测试。

所以你说我实际上不需要测试Firebase方法。只是我输入的凭据都是有效的,并且假定Firebase方法可以工作?如果是这样,这就是我已经做过的。啊,对不起,我读到你想避免运行Firebase更新!考虑到这一点,我想你可能有点卡住了。如果您想测试逻辑是否工作,并且工作逻辑是否写入记录,那么…您的测试将需要作为拆卸的一部分撤销更新。或者模拟Firebase接口以存储在内存中,并调用运行更新的断言。就个人而言,我不会对Firebase本身或框架等进行单元测试,但我会测试我的调用代码是否以正确的格式传递了正确的数据。所以嘲笑吧,但听起来你知道你在做什么。谢谢你的帮助。