2013-05-14 118 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

相关问题