我编写了一个模拟Coredata
管理器,以便在单元测试中测试某些类。
我有大约10个从NSManagedObjectContext
类获得DatabaseManager
的类。我已经决定了单元测试是否正在运行,不处理实际的Coredata NSManagedObjectContext
,而是重定向到Mock Coredata
类以获取NSManagedObjectContext
。
func getContext() -> NSManagedObjectContext {
if ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"] == nil
{
return persistentContainer.viewContext
}
else
{
return MockDatabaseController.instance.managedObjectContext()
}
}
这在单元测试和调试中以及通过即席分发时都非常有效。
但是我担心的是,如果它无法从
ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"]
应用程序中获取正确的值,将可能毫无用处。在生产代码中使用
ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"]
有多可行? 最佳答案
我将使用Swift条件编译以及在构建参数中传递的-D标志,以确保该代码仅在测试环境中处于 Activity 状态,而从未有机会使其投入生产。