【发布时间】:2016-04-27 14:50:04
【问题描述】:
我有以下 Rakefile
require 'bundler/gem_tasks'
require 'rake/testtask'
Rake::TestTask.new do |task|
task.libs << %w(test lib)
task.pattern = 'test/**/*_test.rb'
end
task default: :test
而测试是用minitest定义的:
require 'test_helper'
require 'certmanager'
class CertificateTest < Minitest::Test
context 'settings' do
should 'retrieve settings' do
assert_equal 'test123', Certmanager::Settings.key_passphrase
end
end
end
现在还有一些特定于操作系统的代码,例如 Linux 上的 FileUtils.ln_s 和 Windows 上的 FileUtils.cp。此代码需要不同的测试。在这种情况下,例如assert_equal filepath, File.readlink(linkpath)(Linux)与assert File.exist?(filepath)(Windows)
区分操作系统类型的最佳做法是什么? 我是否没有以 Linux 可以测试 Windows 特定代码的方式编写测试,反之亦然? 是否可以在测试中区分“内联”? 是否有必要拥有两个不同的测试集并在 Rakefile 中决定需要执行哪个测试集?甚至可能在 Rakefile 中吗?
【问题讨论】:
-
是的,它可以工作,而
File.readlink和FileUtils.ln_s在 Windows 上不起作用(未实现的异常)。因此,您必须在 Windows 上使用不同的东西。在我的情况下FileUtils.cp。由于FileUtils.cp和FileUtils.ln_s具有不同的返回值,因此您必须使用不同的测试。此外,这只是一个例子。有不同的情况。另一个可能是默认配置路径。在 Linux 上,例如/etc/certmanager和 WindowsC:/User/.../AppData/.../certmanager。我再说一遍,你需要依赖于操作系统的两个不同的测试
标签: ruby unit-testing testing operating-system tdd