swift - XC测试 : how can we inject a class at runtime

标签 swift dependency-injection xcode-ui-testing

出于显而易见的原因,我不想用测试代码污染我的生产代码。我正在尝试使用 XCode 的 ui 测试框架。在运行时,我想用仅存在于我的测试目标中的另一个类替换其中一个类。

知道如何实现这一目标吗?

最佳答案

您需要所谓的测试模拟。

您在测试文件中创建一个模拟类来扩展您想要模拟的类。

class MockHttp extends HttpService {
  var getWasCalledCount = 0

  override func get(request: URLRequest) { 
   getWasCalledCount = getWasCalledCount + 1
  }
}

然后在您的测试中,您使用模拟修改原始类属性(我喜欢在 setUp 方法中修改它)

override func setUp() {
  var mockHttp = MockHttp()
  classIWantToInjectWithMock = ClassIWantToInjectWithMock(http: mockHttp)
}

我希望这有帮助!祝你有美好的一天!

关于swift - XC测试 : how can we inject a class at runtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40180997/

相关文章:

swift - setLocalizedDateFormatFromTemplate 删除 -

ios - UITableView 在 Swift 中改变一些单元格的东西

Scala:通过 Reader 和兼容性进行依赖注入(inject)

c++ - 如何创建用于测试 QTcpSocket 的依赖注入(inject)?

ios - 使用扩展来扩展多个类

ios - 将 UITableViewCell 变成一排按钮/手势识别器?

angular - 我可以使用自定义 ReflectiveInjector 策略来获取组件提供者吗?

Xcode UI 测试 - 拖放

swift - Xcode 10 GM : XCUIScreen. main.screenshot() 与 `dyld: lazy symbol binding failed` 崩溃

ios - Xcode 7 UI 测试失败 : App accessibility isn't loaded