运行 示例所需的 Cucumber-cpp 软件

Cucumber-cpp required software for running example

克隆和安装后(我相信正确的方法 - 我遵循 this tutorial)我转到 ~\Cucumber\Cucumber\cpp\examples\Calc 并输入 cucumber --init

我明白了

C:\Cucumber\Cucumber-cpp\examples\Calc>cucumber --init
  exist   features
  exist   features/step_definitions
  exist   features/support
  exist   features/support/env.rb
  Timed out calling wire server with message 'step_matches' (Timeout::Error)

其次是

C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/connection.rb:45:in `block in fetch_data_from_socket'
C:/Ruby/lib/ruby/2.4.0/timeout.rb:108:in `timeout'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/connection.rb:45:in `fetch_data_from_socket'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/connection.rb:22:in `call_remote'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/request_handler.rb:10:in `execute'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/protocol/requests.rb:14:in `execute'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/protocol.rb:8:in `step_matches'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/connections.rb:33:in `block in step_matches'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/connections.rb:33:in `map'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-wire-0.0.1/lib/cucumber/wire/connections.rb:33:in `step_matches'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/step_match_search.rb:20:in `call'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/step_match_search.rb:20:in `call'
C:/Ruby/lib/ruby/2.4.0/delegate.rb:83:in `method_missing'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/step_match_search.rb:62:in `call'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:66:in `matches'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:47:in `result'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:37:in `find_match'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:33:in `attempt_to_activate'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:29:in `map'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:29:in `new_test_steps'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:23:in `test_case'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:12:in `test_case'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/test/case.rb:25:in `describe_to'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/filters/activate_steps.rb:12:in `test_case'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/test/case.rb:25:in `describe_to'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/test/filters/locations_filter.rb:18:in `block in done
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/test/filters/locations_filter.rb:17:in `each'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/test/filters/locations_filter.rb:17:in `done'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/filter.rb:62:in `done'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/test/filters/tag_filter.rb:18:in `done'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/compiler.rb:24:in `done'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core/gherkin/parser.rb:37:in `done'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core.rb:32:in `parse'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-core-3.1.0/lib/cucumber/core.rb:21:in `compile'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/runtime.rb:75:in `run!'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/lib/cucumber/cli/main.rb:34:in `execute!'
C:/Ruby/lib/ruby/gems/2.4.0/gems/cucumber-3.1.1/bin/cucumber:9:in `<top (required)>'
C:/Ruby/bin/cucumber:23:in `load'
C:/Ruby/bin/cucumber:23:in `<main>'

虽然我知道这是一个基本错误,但我真的找不到解决方案。当我输入 google.
时,我访问了大多数显示的链接 我的问题是:
- 我在网络上工作,这会导致布线问题吗?
- 运行 这个例子需要额外的步骤吗? documentation 提到了 CMake 但我没有找到它的用法
- 还有哪些其他问题可能导致此问题?
- 你能给我指点任何好的教程来开始使用 cucumber-cpp 吗? (只写)

这台电脑是 Windows 7 Professional

编辑:
如果我在 wire 文件中使用给定的端口,我会得到:

C:\Cucumber\Cucumber-cpp\examples\Calc>cucumber --init
   exist   features
   exist   features/step_definitions
   exist   features/support
   exist   features/support/env.rb
Unable to contact the wire server at localhost:3902. Is it up? 
(Cucumber::Wire::Connection::ConnectionError)

根据我找到的任何信息,我也无法解决此问题。

答案:

  • Windows 上的防火墙可能会导致问题,但通常您会看到一个弹出窗口,要求确认访问(您也可以尝试暂时禁用防火墙以验证是否存在问题)。
  • 是的,虽然缺乏很好的解释,但项目README中定义的步骤应该是正确的。
  • 不使用 C++ 步骤定义启动 Wire 服务器。
  • 项目存储库中的指南可能是最好的起点(确保您遵循所有步骤)。不幸的是,没有很好的文档。

Cucumber-CPP 当前的工作方式是让 Cucumber-Ruby 连接到 C++ 实现正在侦听的 TCP 端口。当有线协议在 cucumber.wire 文件中定义时,C++ 有线协议服务器正在侦听主机和端口,Cucumber-Ruby 将尝试 运行 它们与 Cucumber-CPP。

C++是编译型语言,所以步骤定义必须先编译。提供的示例使用 CMake,如 README 中所述。 Cucumber-CPP 需要链接到步骤定义和它们使用的所有内容(通常是被测应用程序),创建一个可执行文件来监听 Cucumber-[ 的有线协议端口(默认为 localhost:3902) =31=] 连接到(并在断开连接时退出)。

                    +------------------------------------------+
                    |                                          |
+----------+        | +----------+  +----------+  +----------+ |
|          |        | |          |  |          |  |          | |
| Cucumber |        | | Cucumber |  | C++ Step |  | Your     | |
| Ruby     |--------->| CPP Wire |--| Defs     |--| CPP App  | |
|          |        | | Server   |  |          |  |          | |
|          |        | |          |  |          |  |          | |
+----------+        | +----------+  +----------+  +----------+ |
                    |                                          |
                    +------------------------------------------+