Ios 使用xui进行UI测试

Ios 使用xui进行UI测试,ios,unit-testing,swift3,xcode8,ios10,Ios,Unit Testing,Swift3,Xcode8,Ios10,我正在尝试对xCode 8中的视图控制器进行单元测试。我能够使用XCUI成功地记录、断言和运行它。但我想独立测试特定的视图控制器 就像有4个控制器A、B、C和D按顺序排列(A->B->C->D)。我想直接启动C控制器并独立测试它 我可以用这种方式进行测试,即默认的XCUI应用程序将打开一个控制器,然后单击某个东西,您将转到B控制器,然后单击B中的按钮将转到C控制器。然后你可以测试它。但我不想按顺序排列。我想直接测试C控制器 如果有人做过同样的工作,你能帮忙吗。 提前感谢。在使用Xcode的XUI

我正在尝试对xCode 8中的视图控制器进行单元测试。我能够使用XCUI成功地记录、断言和运行它。但我想独立测试特定的视图控制器

就像有4个控制器A、B、C和D按顺序排列(A->B->C->D)。我想直接启动C控制器并独立测试它

我可以用这种方式进行测试,即默认的XCUI应用程序将打开一个控制器,然后单击某个东西,您将转到B控制器,然后单击B中的按钮将转到C控制器。然后你可以测试它。但我不想按顺序排列。我想直接测试C控制器

如果有人做过同样的工作,你能帮忙吗。 提前感谢。

在使用Xcode的XUITEST中

如果现在使用UITestCase,则无法直接打开D控制器

每次都应该执行顺序(A->B->C->D),因为所有测试用例规范都会导致应用程序启动,特别是登录,所以每次UITest都需要注销

对testCase使用XCUI测试的补充方法

提供A、B、C的序列函数作为最小化重复代码的协议

ex)定义登录协议

protocol Loginable {
    var app: XCUIApplication! { get }
    func login()
}

extension Loginable {
    func login() {
        //do login ... typting textfield , tap login button
    }
}
使用Loginable扩展A、B、C、D UITestCase以删除重复的代码(因为每个D uitest用例都应该在示例中登录)

对sequence函数进行扩展以重用每个案例

另一种解决办法是

使用

KIF可以基于XCTest而不是XCUITest测试UITest

KIF可以像单元测试一样访问您的类,这意味着

您可以向窗口显示您的D ViewController(直接设置rootViewController)并测试KIF UItest函数

ex)KIF

KIF可以直接启动D控制器,使用Xcode在XUITEST中将rootViewController设置为window

如果现在使用UITestCase,则无法直接打开D控制器

每次都应该执行顺序(A->B->C->D),因为所有测试用例规范都会导致应用程序启动,特别是登录,所以每次UITest都需要注销

对testCase使用XCUI测试的补充方法

提供A、B、C的序列函数作为最小化重复代码的协议

ex)定义登录协议

protocol Loginable {
    var app: XCUIApplication! { get }
    func login()
}

extension Loginable {
    func login() {
        //do login ... typting textfield , tap login button
    }
}
使用Loginable扩展A、B、C、D UITestCase以删除重复的代码(因为每个D uitest用例都应该在示例中登录)

对sequence函数进行扩展以重用每个案例

另一种解决办法是

使用

KIF可以基于XCTest而不是XCUITest测试UITest

KIF可以像单元测试一样访问您的类,这意味着

您可以向窗口显示您的D ViewController(直接设置rootViewController)并测试KIF UItest函数

ex)KIF


KIF可以直接启动D控制器,将rootViewController设置为window

,因为XCUI测试是集成测试,所以您必须遵循流程
(A->B->C->D)
。您可以改为执行必要的步骤(例如登录),然后为您的应用程序创建深度链接。 深度链接是一种技术,允许应用程序打开到特定的UI或资源,以响应某些外部事件。 因此,您不必重复
(a->B->C->D)
的顺序,而是可以实现一个直接带您到D的深层链接。这样,特定的测试只检查D视图控制器的功能。 以下是一些有用的链接:


由于XCUI测试是集成测试,因此必须遵循流程
(A->B->C->D)
。您可以改为执行必要的步骤(例如登录),然后为您的应用程序创建深度链接。 深度链接是一种技术,允许应用程序打开到特定的UI或资源,以响应某些外部事件。 因此,您不必重复
(a->B->C->D)
的顺序,而是可以实现一个直接带您到D的深层链接。这样,特定的测试只检查D视图控制器的功能。 以下是一些有用的链接:


谢谢你,克鲁兹。您的解决方案看起来非常有用。我会实施的。非常感谢。@GopeshGupta谢谢Cruz。您的解决方案看起来非常有用。我会实施的。非常感谢。@GopeshGupta