针对iPhone Native应用程序的测试驱动设计

我正在试验iPhone SDK并做一些TDD ala Dr. Nic的rbiPhoneTest项目。 我想知道有多少(如果有的话)成功使用这个或任何其他测试框架的iPhone / Cocoa? 更重要的是,我想知道如何最好地断言专有的二进制请求/响应协议。 想法是通过网络发送二进制请求并接收二进制响应。 使用byte和’ing和oring创建请求和响应。 我正在使用黄金副本模式来测试我的请求。 这是我到目前为止所拥有的。 不要笑,因为我是btoh 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 

我对Ruby或二进制协议知之甚少,但如果您对iPhone上的unit testing感兴趣,可能需要查看Google Toolbox for Mac 。 我用它测试我的OpenGL ES应用程序非常成功。

克利夫,从长远来看,你最好在纯粹的ObjC TDD工具上投入时间。 我成功地在fmdb-migration-manager中使用了我自己的rbiphonetest库,但它的用处可能仅限于库等。即便如此,毫无疑问,“cocoa在Cocoa中工作但在UIKit的情况下失败”使rbiphonetest可疑使用。 希望有一天RubyCocoa可以针对英特尔UIKit库构建,然后我认为它非常有用且坚固。