Tuesday, September 27, 2016

User Interface Testing - Testing with Xcode


Concepts and APIs

UI Testing 은 unit testing과 근본적으로 다르다.
Unit Testing은 app 스코프안에서 앱의 변수, 상태 등등을 전체적으로 접근 하며, function이나 method를 테스트 한다.
반면에 UI Testing은 User Level에서 테스트함으로 앱안의 함수등을 접근 할수 없다.
즉 User 관점에서 테스트 하는것이다.

APIs

- XCUIApplication
- XCUIElement
- XCUIElementQuery

** 가이드 문서에 별다른 내용이 없다 ㅠ
이건 가이드라기 보다 introduction에 가까운거 아닌가, 맨땅에 헤딩좀 해야 겠다.

Writing Tests of Asynchronous Operations- Testing with Xcode


XCTest에서 expectation 을 통해 Async Op.을 테스트 할수 있다.
XCTestCase+AsynchronousTesting.h 참조.


// Test that the document is opened. Because opening is asynchronous,

// use XCTestCase's asynchronous APIs to wait until the document has

// finished opening.

- (void)testDocumentOpening

{

    // Create an expectation object.

    // This test only has one, but it's possible to wait on multiple expectations.

    XCTestExpectation *documentOpenExpectation = [self expectationWithDescription:@"document open"];



    NSURL *URL = [[NSBundle bundleForClass:[self class]]

                              URLForResource:@"TestDocument" withExtension:@"mydoc"];

    UIDocument *doc = [[UIDocument alloc] initWithFileURL:URL];

    [doc openWithCompletionHandler:^(BOOL success) {

        XCTAssert(success);

        // Possibly assert other things here about the document after it has opened...



        // Fulfill the expectation-this will cause -waitForExpectation

        // to invoke its completion handler and then return.

        [documentOpenExpectation fulfill];

    }];



    // The test will pause here, running the run loop, until the timeout is hit

    // or all expectations are fulfilled.

    [self waitForExpectationsWithTimeout:1 handler:^(NSError *error) {

        [doc closeWithCompletionHandler:nil];

    }];

}


Test Basics - Testing with Xcode


* 모든 소프트웨어는 각 컴포턴트(혹은 모듈을) 조합함으로써 만들어지고,
좋은 테스트라함은 해당 소프트웨어의 기능을 모두 아우를수 있는 레벨의 ( 콤포넌트 단위/ 혹은 콤포넌트를 조합하는 High Level)의 테스트를 수행하는것이다.
이를 위해 XCTests가 있다.


* Unit Tests

하위레벨의 콤포넌트(Model, ViewController, etc)를 테스트 하기에 적합.

> xcode 는 앱 뿐만 아니라, Library도 테스트 할수 있게, App/Library 두가지의 Context를 제공한다.

* Performance Mesure

특정 연산에 대한 성능 분석

* UI Tests.

어플리케이션의 workflow를 테스트 할수 있는 도구.



공부하는 사람.

공부하는 사람.

내가 소프트웨어 엔지니어링을 매력적으로 느끼고, 직업으로 삼게 된 가장 큰 계기는,
이 직업은 꾸준히 공부할 수 있는, 아니 해야만 하는 직업이기 때문이다.

요 몇 년 나는 제대로 된 공부를 하지 않았다.
새로운 기술을 익히고 프로젝트에 적용 하는 것은 그 이전에도 해왔던 것으로 나에게 공부 코스트가 그렇게 큰일은 아니다.

삶의 권태를 느끼고 나를 둘러싼 환경을 변화시키고자 아등바등하고 있는 요즘,
또 한 번 내 이런 모습을 실감하고 나 자신부터 다시 붙잡고자 노력하고 있다.

공부하는 사람.
참 아름다운 말 아닌가. 꾸준히 나아가보자.

Monday, September 26, 2016

Testing with Xcode.


  • Quick Start. Beginning with Xcode 5 and the introduction of the XCTest framework, the process of configuring projects for testing has been streamlined and automated with the test navigator to ease bringing tests up and running.
  • Performance Measurement. Xcode 6 and later includes the ability to create tests that allow you to measure and track performance changes against a baseline.
  • UI Testing. Xcode 7 adds capabilities for writing tests that exercise an app’s UI. It includes the ability to record UI interactions into source code that you can transform into tests.
  • Continuous Integration and Xcode Server. Xcode tests can be executed using command-line scripts or configured to be executed by bots on a Mac running Xcode Server automatically.
  • Modernization. Xcode includes a migrator for converting projects that have OCUnit tests to have XCTest tests. 


See Also