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
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 –