2008-10-12 31 views
16

Tôi đang thử nghiệm với SDK iPhone và thực hiện một số dự án TDD ala của Dr. Nic's rbiPhoneTest. Tôi tự hỏi có bao nhiêu, nếu có, đã thành công bằng cách sử dụng này hoặc bất kỳ khuôn khổ thử nghiệm khác cho iPhone/Cocoa? Quan trọng hơn, tôi muốn biết cách xác nhận tốt nhất một giao thức yêu cầu/phản hồi nhị phân độc quyền. Ý tưởng là gửi yêu cầu nhị phân qua mạng và nhận phản hồi nhị phân. Yêu cầu và phản hồi được tạo bằng cách sử dụng byte và'ing và or'ing. Tôi đang sử dụng mẫu sao chép vàng để kiểm tra yêu cầu của mình. Đây là những gì tôi có cho đến nay. Đừng cười như tôi mới vào btoh Objective C và Ruby:Kiểm tra Thiết kế Điều khiển cho ứng dụng Bản địa trên iPhone

require File.dirname(__FILE__) + '/test_helper' 
require 'fileutils' 
require 'io' 

require "MyModel.bundle" 
OSX::ns_import :MyModel 

module MyTestExtensions 
    def is_absolute_path(path) 
    return /^\/.*/.match(path) 
    end 

    def parent_directory(file) 
    dir = file 
    if(! is_absolute_path(dir)) 
     dir = File.expand_path(dir) 
    end 
    dir = File.dirname(dir) 
    assert is_absolute_path(dir), "Expecting an absolute path with #{dir}" 
    return dir 
    end 

    def assert_NSData_contains_bytes_from_file(file, data) 
    assert_not_nil data, "Data should not be nil." 
    assert data.bytes, "data should have bytes" 
    data.length.times { |i| 
     expected = file.getc 
     assert_not_nil expected, "Expected only #{i} bytes. Actual data contains more." 
     actual = data.bytes.int8_at(i) 
     assert_equal expected, actual, "Bytes should be equal at offset #{i} expected #{expected.chr} but was #{actual.chr}" 
    } 
    expected = file.getc 
    raise AssertionFailedError, "Expecting #{expected.chr} at offset #{data.length}" unless expected == nil 
    end 

end 

class TestMyModel < Test::Unit::TestCase 
include OSX 
include MyTestExtensions 

    def this_files_dir 
    return parent_directory(__FILE__) 
    end 

    def setup 
    @expectedReq = File.new("#{this_files_dir}/ExpectedMyReq") 
    # @expectedReq = File.new("#{this_files_dir}/hello.txt") 
    assert File.exist?("#{this_files_dir}/ExpectedMyReq"), "The file [#{@expectedReq.path}] should exist." 
    end 

    def test_my_model_class_exists 
    MyModel 
    end 

    def test_can_init_instance 
    assert MyModel.instancesRespondToSelector(:init), "MyModel Should define :init" 
    end 

    def test_my_model_can_request_my_data 
    myModel = MyModel.alloc.init 
    data = myModel.requestMyData 'Some query text' 
    assert_NSData_contains_bytes_from_file @expectedReq, data 
    end 

end 

Trả lời

11

Tôi không biết nhiều về Ruby hoặc giao thức nhị phân, nhưng nếu bạn đang quan tâm đến việc kiểm tra đơn vị trên iPhone, bạn có thể muốn để xem Google Toolbox for Mac. Tôi đang thử nghiệm thành công ứng dụng OpenGL ES của mình với nó.

+0

Tôi đồng ý, điều này đã làm việc thực sự tốt cho tôi kiểm tra các lớp tĩnh của tôi. http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting –

6

Vách đá, lâu dài bạn đang đầu tư thời gian tốt nhất vào các công cụ TDD thuần túy của ObjC. Tôi đã sử dụng lib rbiphonetest của riêng mình trong trình quản lý fmdb-migration-manager thành công, nhưng tính hữu dụng của nó có thể bị hạn chế đối với các thư viện, v.v. Thậm chí sau đó chắc chắn sẽ đủ 'hoạt động trong Cocoa nhưng thất bại trong các kịch bản UIKit' để làm cho rbiphonetest đáng ngờ sử dụng. Hy vọng rằng một ngày RubyCocoa có thể được xây dựng dựa trên các thư viện Intel UIKit và sau đó nó sẽ rất hữu ích và mạnh mẽ mà tôi nghĩ.

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