Ruby - 未初始化的常量

时间:2015-02-09 22:00:10

标签: ruby-on-rails ruby

我有这4个类,代码很简单,但是当我尝试生成时,它会返回错误,如

in `<main>': uninitialized constant PruebasUnitarias (NameError)

代码是这样的,我不知道出了什么问题,我认为这是因为要求,但我在一个文档中都有,但仍然崩溃。

class Complejo
  def initialize (real, imaginario)
    @real = real
    @imaginario = imaginario
  end

  def sumar (complejo)
    @real = @real + complejo.real
    @imaginario = @imaginario + complejo.imaginario
  end
  attr_reader :real, :imaginario
end

class Prueba
  def assertCierto(valor)
    return valor
  end

  def assertFalso(valor)
    return valor
  end

  def assertIgual(num1, num2)
    if(num1 == num2)
      return true
    end
    return false
  end

  def assertDistinto(num1, num2)
    if(num1 != num2)
      return true
    end
    false
  end

  def assertNil param
    if (param == nil)
      return true
    end
    false
  end

  def assertContiene(param1, param2)
    param1.include?(param2)
  end

end

class PruebasUnitarias::Prueba
  def run
    metodos = self.methods
    if(self.respond_to? :inicializacion)
      self.inicializacion
    end

  end
end

class PruebaComplejo < PruebasUnitarias::Prueba
  def inicializacion
    @c1 = Complejo.new(3,5)
    @c2 = Complejo.new(1,-1)
  end

  def prueba_suma
    @c1.sumar(@c2)
    assertIgual(@c1.real, 4)
    assertIgual(@c1.imaginario, 4)
  end

  def prueba_suma_cero
    @c2.sumar(Complejo.new(0,0))
    assertCierto(@c2.real==1)
    assertCierto(@c2.imaginario==-1)
  end

  def prueba_suma_nula
    @c2.sumar(nil)
    assertIgual(@c2.real, 1)
    assertIgual(@c2.imaginario, -1)
  end

  def imprimir (complejo)
    puts "complejo: #{complejo.real}, #{complejo.imaginario}i"
  end
end

2 个答案:

答案 0 :(得分:0)

您必须在将类放入其中之前声明该模块。试试这个:

module PruebasUnitarias
  class Prueba
    ...
  end
end
class PruebaComplejo < PruebasUnitarias::Prueba
  ...
end

答案 1 :(得分:0)

就像关于编程风格的注释一样,在测试您的值时,您需要用更简单的术语来思考。考虑这些变化:

def assertCierto(valor)
  valor
end

def assertFalso(valor)
  valor
end

def assertIgual(num1, num2)
  num1 == num2
end

def assertDistinto(num1, num2)
  num1 != num2
end

def assertNil param
  param == nil
end

没有必要使用if测试来查看某些内容是否相等,然后返回truefalse。测试本身就这样做,所以只需比较值,让Ruby默认返回结果。

1 == 1 # => true
1 == 2 # => false
1 != 1 # => false
1 != 2 # => true

另外,使用snake_case作为方法名称,而不是camelCase。 ItsAReadabilityThing:

  def assert_cierto(valor)

  def assert_falso(valor)

  def assert_igual(num1, num2)

  def assert_distinto(num1, num2)

  def assert_nil param