Тест управляемый дизайн для iPhone родных приложений - PullRequest
16 голосов
/ 12 октября 2008

Я экспериментирую с iPhone SDK и выполняю какой-то TDD, а именно, проект Николая rbiPhoneTest Мне интересно, сколько, если таковые имеются, успешно использовали этот или любой другой фреймворк для тестирования iPhone / Cocoa? Более важно, я хотел бы знать, как лучше всего утверждать проприетарный двоичный протокол запроса / ответа. Идея состоит в том, чтобы отправить двоичный запрос по сети и получить двоичный ответ. Запросы и ответы создаются с использованием байтов и 'и и или'. Я использую золотой образец для проверки моего запроса. Вот что у меня так далеко. Не смейтесь, потому что я новичок в Objective C и Ruby:

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

Ответы [ 2 ]

11 голосов
/ 12 октября 2008

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

6 голосов
/ 10 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...