2014-10-06 15 views
6

Tôi đang viết các bài kiểm tra đơn vị cho một ứng dụng và muốn kiểm tra xem một số UIAlertController có được trình bày trong một tình huống cụ thể không.Kiểm tra xem UIAlertController có được trình bày trong một trường hợp XCTest

-(void)testBadLogin { 
    // enter username and password in UITextFields 
    self.viewController.usernameField.text = @"[email protected]"; 
    self.viewController.passwordField.text = @"incorrect_pass"; 
    [loginButton sendActionsForControlEvents: UIControlEventTouchUpInside]; 

    // this isn't right 
    XCTAssertNotNil([self.viewController alertController], @"alertController should appear"); 
} 

Làm cách nào để kiểm tra xem UIAlertController có được hiển thị ở đầu chế độ xem hiện tại không?

Trả lời

5

"XCTest không có nghĩa là sẽ được sử dụng để kiểm tra các thành phần giao diện người dùng" không thực sự chính xác. Tôi đang sử dụng XCTest cho hầu hết các thử nghiệm giao diện người dùng và nó hoạt động tốt. Câu trả lời đúng sẽ là "Mocking".

Tôi sẽ sử dụng OCMock để mô phỏng trình kiểm tra chế độ xem đã kiểm tra và "xác minh" phương thức presentViewController ... được gọi với bộ điều khiển cảnh báo. Đây là một giải pháp gọn gàng và hoạt động tốt. (Bạn thậm chí có thể bỏ qua điều khiển cảnh báo được truyền cho phương thức này và chỉ cần kiểm tra xem bộ điều khiển xem đã được chuyển qua phương thức presentViewController ...)

-2

XCTest không có nghĩa là được sử dụng để kiểm tra các thành phần giao diện người dùng.

UIAutomation Thư viện JavaScript của Sử dụng của Apple cho việc này:

https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UsingtheAutomationInstrument/UsingtheAutomationInstrument.html#//apple_ref/doc/uid/TP40004652-CH20

Documents cho Alerts thử nghiệm: https://developer.apple.com/library/ios/documentation/ToolsLanguages/Reference/UIAAlertClassReference/index.html#//apple_ref/doc/uid/TP40009898

+3

Nhiều người dùng (và tôi bao gồm bản thân mình) muốn xác minh xem một cảnh báo có được gọi trên một chức năng mà chúng tôi đang thử nghiệm hay không. Đây không phải là thử nghiệm các thành phần giao diện người dùng, nó chỉ là đảm bảo chức năng ở đó. Mocking là những gì nên được sử dụng cho nó. –

0

Tôi đã viết một trình bao bọc xung quanh UIAlertController để kiểm tra đơn vị dễ dàng hơn.

Bạn có thể kiểm tra xem nó có thể nhìn thấy

XCTAssert(testableAlert.visible) 

Và bạn cũng có thể thực hiện hành động của mình

testableAlert.simulateAction("OK") 

https://github.com/exchangegroup/TestableAlert

0

Nó cũng có thể được thực hiện theo cách này:

Hãy nói rằng chúng ta có một nút mà khi khai thác cho thấy bộ điều khiển xem:

- (void) didTapButton 
{ 
    UIAlertController* c = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" 
                 preferredStyle:UIAlertControllerStyleAlert]; 
    [self presentViewController:c animated:ANIMATED completion:nil]; 
} 

Lưu ý rằng tham số ANIMATED không phải là 'CÓ' hoặc 'KHÔNG'. Nó được định nghĩa trong PrefixHeader là:

#define ANIMATED (getenv("runningTests") == NULL) 

và chạyThí là biến môi trường được xác định trong mục tiêu kiểm tra. Chúng tôi không muốn hoạt ảnh khi thực hiện kiểm tra đơn vị/tích hợp.

Phương pháp thử nghiệm trông giống như:

- (void) testButtonWillShowAlertView 
{ 
    UIApplication.sharedApplication.delegate.window.rootViewController = controller; 
    [controller.button sendActionsForControlEvents:UIControlEventTouchUpInside]; 
    XCTAssertEqualObjects(controller.presentedViewController.class, UIAlertController.class); 
} 

dòng quan trọng là

UIApplication.sharedApplication.delegate.window.rootViewController = controller; 

Apparentely, rootViewController trên UIWindow phải được thiết lập.

Các vấn đề liên quan