【发布时间】:2014-10-14 13:05:52
【问题描述】:
我在下面有用于自动化测试的测试结构。
#/project/class/Calculator.rb
require 'TestModule'
require 'MathOperation'
class Calculator
include TestModule
include MathOperation
def initialize(num1, num2)
@num1 = num1
@num2 = num2
end
end
#/project/methods/MathOperation.rb
module MathOperation
def operation_addition
addition = @num1 + @num2
return addition
end
end
#/project/methods/TestModule.rb
module TestModule
def test_addition(value)
assert_equal 25, value
end
end
#/project/tescases/TestCalculator.rb
require 'minitest/autorun'
require 'calculator'
class TestCalculator < Minitest::Test
def setup
@calc = Calculator.new(15, 10)
end
def test_proper_addition
resolution = @calc.operation_addition
@calc.test_addition(resolution)
end
end
当我执行测试类 TestCalculator 时收到此错误。
NoMethodError: undefined method 'assert_equal' for #<Calculator:0x00000002a77518 @num1=15, @num2=10
当我在 TestCalculator 类中使用 assert_equal 方法时,它起作用了。但是这种方式会在未来造成冗长的测试用例和冗余代码。如何在 minitest 类调用的模块中使用“断言”?是否可以?
【问题讨论】:
-
我不明白你的设计,但我可以告诉你,你的测试代码应该和你的非测试代码完全解耦。例如。
Calculator不应包含TestModule。 -
我不确定你的解耦到底是什么意思。但是,如果我从
Calculator中删除TestModule,我将无法使用Calculator对象从TestModule调用方法。我的问题是模块TestModule不能使用断言方法。但我不是红宝石专家,也许我的设计完全错误。
标签: ruby minitest assertions