0
如果代码运行测试或产品应用程序,在运行时检测的最佳方式是什么?在运行时检测产品代码或测试代码是否在Swift中
基本上我想允许一个setter只是为了测试目的。喜欢的东西:
class LoginService {
private static var LoginService instance = LoginService();
public var sharedInstance: LoginService {
get{
return instance;
}
set{
if(inRunningTests()){
instance = newValue;
} else {
fatalError("This setter is just for testing")
}
}
}
static func isRunningTests() -> Bool {
// ????
}
}
'#if DEBUG return true #else return false #endif'。在给定配置的项目设置中定义了DEBUG。 – Sulthan
这是相当的代码味道。为什么不创建一个单独的'MockLoginService'来分享与LoginService相同的新协议,然后将其用于测试。 – Alexander
您可以使用多态,并为您的测试使用'MockLoginService',然后使用'ProdLoginService'的实际登录服务,它们都从一个抽象的'LoginService'继承。然后,根据您的环境实例化正确的服务:LoginService x =(ENV ==“TEST”)?新的MockLoginService():新的ProdLoginService()'...'x.doSomething()'。这使用“告诉别人问题”的方法。对isRunningTests进行大量检查并不会很好。你可以使用一个环境变量来存储你正在工作的环境。 –