ios – XCTest期望使用swift进行方法调用

前端之家收集整理的这篇文章主要介绍了ios – XCTest期望使用swift进行方法调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何编写一个使用 swift和XCTest进行方法调用的测试?

我可以使用OCMock,但他们并没有正式支持swift,所以没有多少选择.

解决方法

正如你所说,OCMock不支持 Swift(也不支持OCMockito),所以现在我看到的唯一方法是创建一个手动模拟.在swift中,由于您可以在方法中创建内部类,但这样做会有点痛苦,但仍然不像模拟框架那样方便.

这里有一个例子.代码是自我解释的,我必须做的唯一事情(参见下面的编辑1)使其工作是将我想要在测试中使用的类和方法声明为公共(似乎测试类不属于相同的应用程序的代码模块 – 将尝试找到一个解决方案).

编辑1 2016/4/27:
由于您可以使用“@testable import ModuleName”功能,因此不再需要将您想要测试的类声明为公共.

考试:

  1. import XCTest
  2. import SwiftMockingPoC
  3.  
  4. class MyClassTests: XCTestCase {
  5.  
  6. func test__myMethod() {
  7. // prepare
  8. class MyServiceMock : MyService {
  9.  
  10. var doSomethingWasCalled = false
  11.  
  12. override func doSomething(){
  13. doSomethingWasCalled = true
  14. }
  15.  
  16. }
  17. let myServiceMock = MyServiceMock()
  18.  
  19. let sut = MyClass(myService: myServiceMock)
  20.  
  21. // test
  22. sut.myMethod()
  23.  
  24. // verify
  25. XCTAssertTrue(myServiceMock.doSomethingWasCalled)
  26. }
  27.  
  28. }

MyClass.swift

  1. public class MyClass {
  2.  
  3. let myService: MyService
  4.  
  5. public init(myService: MyService) {
  6. self.myService = myService
  7. }
  8.  
  9. public func myMethod() {
  10. myService.doSomething()
  11. }
  12.  
  13. }

MyService.swift

  1. public class MyService {
  2.  
  3. public init() {
  4.  
  5. }
  6.  
  7. public func doSomething() {
  8.  
  9. }
  10.  
  11. }

猜你在找的iOS相关文章