2013-05-14 44 views
4

我正在寫一個類似ATM系統的套接字/服務器解決方案。如果有人能告訴我我錯過了什麼,我將不勝感激。出於某種原因,我得到以下錯誤運行我的存根測試套件:爲什麼我會在簡單的類中獲得「Undefined method :: new」?

# Running tests: 

.E 

Finished tests in 0.002411s, 829.4384 tests/s, 414.7192 assertions/s. 

    1) Error: 
test_0001_connects_to_a_host_with_a_socket(AtmClient::connection): 
NoMethodError: undefined method `new' for #<SpoofServer:0x9dce2dc @clients=[], @server=#<TCPServer:fd 5>> 
    /media/wildfyre/Files/Programming/KTH/progp/Atm/spec/client/SpoofServer.rb:12:in `start' 
    /media/wildfyre/Files/Programming/KTH/progp/Atm/spec/client/client_spec.rb:12:in `block (3 levels) in <top (required)>' 

2 tests, 1 assertions, 0 failures, 1 errors, 0 skips 

我的小核磁文件是:

require_relative '../spec_helper.rb' 
require_relative '../../lib/AtmClient.rb' 
require_relative 'SpoofServer.rb' 

describe AtmClient do 
    it "can be created with no arguments" do 
    AtmClient.new.must_be_instance_of AtmClient 
    end 

    describe 'connection' do 
    it "connects to a host with a socket" do 
     spoof = SpoofServer.new.start 
     client = AtmClient.new.connect 
     spoof.any_incoming_connection?.must_be true 
     spoof.kill 
    end 
    end 
end 

我SpoofServer文件是:

require 'socket' 

class SpoofServer 

    def initialize 
    end 

    def start 
    @clients = [] 
    @server = TCPServer.new 1234 

    @listener_thread = new Thread do 
     @clients.add @server.accept 
    end 
    end 

    def any_incoming_connection? 
    @clients.size > 0 
    end 

    def kill 
    @listener_thread.exit 
    @clients.each {|c| c.close} 
    end 

end 

回答

12

正如你可以在通話的跟蹤閱讀棧:

NoMethodError: undefined method `new' for #<SpoofServer:...> 
    /.../spec/client/SpoofServer.rb:12:in `start' 

的錯誤是在SpoofServer.rb定義的start方法中,在第12行,錯線是:

@listener_thread = new Thread do 

那應該是:

@listener_thread = Thread.new do 

正如你寫的那樣,你是什麼實際上做的是調用new方法傳遞Thread類作爲參數。由於沒有爲SpoofServer類的實例定義new方法,因此會出現NoMethodError異常。

0

在實例的身體方法SpoofServer#start,您不能通過new調用類方法SpoofServer.new

+2

哦,你使用的是C++嗎? – Jokester 2013-05-14 11:45:45

相關問題