2008-10-12 1 views
16

Я экспериментирую с iPhone SDK и выполняю проект TDb ala Dr. Nic's rbiPhoneTest. Мне интересно, сколько, если вообще было, успешно использовало эту или любую другую платформу тестирования для iPhone/Cocoa? Более важно, я хотел бы знать, как лучше всего утверждать собственный бинарный протокол запроса/ответа. Идея состоит в том, чтобы отправить двоичный запрос по сети и получить двоичный ответ. Запросы и ответы создаются с использованием байта и «и». Я использую шаблон золотой копии для проверки моего запроса. Вот что я до сих пор. Не смейтесь, как я новичок в btoh Objective C и Ruby:Тест-драйв для 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 

ответ

11

Я не знаю много о Ruby, или бинарных протоколов, но если Вы заинтересованы в модульном тестировании на iPhone, Вы можете чтобы проверить Google Toolbox for Mac. Я с большим успехом тестировал свое приложение OpenGL ES.

+0

Я согласен, это отлично поработало для меня, тестируя мои статические классы. http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting – 2009-12-02 04:27:06

6

Клифф, надолго, вы лучше всего инвестируете время в чистые инструменты TDD ObjC. Я использовал свой собственный rbiphonetest lib в fmdb-migration-manager успешно, но его полезность, вероятно, ограничена библиотеками и т. Д. Даже тогда, несомненно, будет достаточно «работ в Cocoa, но не выполняется в сценариях UIKit», чтобы сделать rbiphonetest сомнительным для использования. Надеюсь, в один прекрасный день RubyCocoa может быть построен против библиотек Intel UIKit, и тогда это будет очень полезно и крепко, я думаю.

 Смежные вопросы

  • Нет связанных вопросов^_^