Bạn không nên thêm điều kiện để kiểm tra mã bình thường nếu đang kiểm tra. Thay vào đó, bạn nên thử các bài kiểm tra AppDelegate
để làm bất cứ điều gì bạn muốn.
Sau đó, bạn có thể thay thế đại biểu UIApplication là setUp
trong lớp siêu của mỗi XCTestCase
'es của bạn.
class MockAppDelegate:NSObject, UIApplicationDelegate {
}
class BaseTest: XCTestCase {
override func setUp() {
super.setUp()
UIApplication.sharedApplication().delegate = MockAppDelegate()
}
}
class Test1: BaseTest {
override func setUp() {
super.setUp()
// normal testing
}
}
Nếu bạn vẫn muốn dừng thực thi mã cho các xét nghiệm này là phương pháp của tôi hoạt động tốt:
Bạn có thể thêm tham số khởi động để ứng dụng mà chỉ ra rằng đây là chạy thử nghiệm
Các thông số này có thể truy cập từ NSUserDefaults
#define IS_TESTS [[NSUserDefaults standardUserDefaults] boolForKey:@"TESTING"]
Nguồn
2015-01-16 10:18:03
Đây là điểm tốt, tôi đồng ý với việc không bổ sung các điều kiện liên quan đến kiểm tra vào mã thông thường. Những gì tôi thực sự cố gắng làm là dừng mã thực hiện trong 'AppDelegate' chính (xử lý trạng thái người dùng & phiên và lưu trữ dữ liệu). Thật không may, việc tạo một 'MockAppDelegate' không thực hiện điều đó. – Whoa
Tôi đã chỉnh sửa câu trả lời của mình, có một cách để kiểm tra điều này cũng trong Swift. Chỉ cần đặt câu lệnh 'if' trong ủy nhiệm ứng dụng của bạn. –
Điều này sẽ không ngăn ứng dụng bình thường ủy nhiệm chạy, phải không? Ý tôi là, thông thường 'didFinishLaunchingWithOptions' của AppDelegate được kích hoạt trước khi các bộ thử nghiệm bắt đầu chạy. –