iphone - una - programa para crear aplicaciones android
Test Driven Design para iPhone Aplicaciones nativas (2)
Cliff, a largo plazo, es mejor invertir tiempo en herramientas ObjC TDD puras. He usado mi propia rbiphonetest lib en fmdb-migration-manager con éxito, pero su utilidad probablemente se limite a bibliotecas, etc. Incluso entonces habrá, sin duda, suficientes ''trabajos en Cocoa pero fallarán en los escenarios de UIKit'' para hacer que rbiphonetest sea dudoso. Afortunadamente, un día, RubyCocoa se puede construir contra las bibliotecas Intel UIKit y creo que será muy útil y robusto.
Estoy experimentando con el iPhone SDK y haciendo un proyecto TDD ala Dr. Nic rbiPhoneTest. Me pregunto cuántos, si alguno, han tenido éxito utilizando este u otro marco de prueba para iPhone / Cocoa. Más importante, me gustaría saber cómo hacer valer mejor un protocolo de solicitud / respuesta binario patentado. La idea es enviar una solicitud binaria a través de la red y recibir una respuesta binaria. Las solicitudes y las respuestas se crean utilizando byte and''ing y or''ing. Estoy usando el patrón de copia dorada para probar mi solicitud. Esto es lo que tengo hasta ahora. No te rías ya que soy nuevo en el objetivo C y 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
No sé mucho sobre Ruby o los protocolos binarios, pero si le interesan las pruebas unitarias en iPhone, le recomendamos que consulte Google Toolbox para Mac . Estoy teniendo un gran éxito probando mi aplicación OpenGL ES con ella.