将RSpec与Python或C#等其他语言集成的好方法是什么?

时间:2017-03-08 20:04:51

标签: c# python ruby testing rspec

我写了一个Ruby Gem,业务中的其他团队需要在Python和C#中实现相同的功能。

我想针对其他语言的代码运行现有的规范。虽然这听起来像是一个难题,但gem的功能仅限于格式化日志。规格如下:

var showDiv = function() {
  document.getElementById("welcome").style.display = "block";
  localStorage.setItem("greeting", "true")
}

setTimeout(showDiv, 5000); // 5 second delay in MS.

因此,整个测试套件可以简化为一组期望,其中输入是字符串和散列,输出是字符串。

似乎应该很容易编写一个连接器,允许RSpec与另一种语言的代码实例通信。

一些可能性包括使用HTTP或TCP,但我认为这会在规范和应用程序中引入重要的代码和复杂性。

那么,是否有既定的模式或工具可以做到这一点?

1 个答案:

答案 0 :(得分:1)

一种快速而又脏的方法就是执行这样的python代码:

%x(python -c "print 'hello I\\'m a logger'").include?('hello')
#=> true

有关更高级的示例,您可以使用IO.popenOpen3

require 'open3'

def run_python(code)
  Open3.popen3("python -c \"#{code}\"") do |stdin, stdout, stderr, wait_thr|
    {stdout: stdout.read, stderr: stderr.read}
  end
end

ten_warnings = %q|import logging
for i in range(10):
  logging.warning('Warning %d' % i)
|

describe 'Logger' do
  specify 'success' do
    expect(run_python(ten_warnings)[:stderr]).to include "Warning 5"
  end
end

输出:

.

Finished in 0.0266 seconds (files took 0.1499 seconds to load)
1 example, 0 failures