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進行大量檢查並不會很好。你可以使用一個環境變量來存儲你正在工作的環境。 –