【发布时间】:2013-07-11 01:19:01
【问题描述】:
我需要对一个删除所有特殊字符(如,、: 和一些空格)的方法进行单元测试。
被测方法将文件的每一行存储在单独的数组位置。
如何测试该方法是否删除了文本文件的所有特殊字符?
【问题讨论】:
-
如果您提供您的测试方法的代码示例,您可能更有可能获得代码示例。
我需要对一个删除所有特殊字符(如,、: 和一些空格)的方法进行单元测试。
被测方法将文件的每一行存储在单独的数组位置。
如何测试该方法是否删除了文本文件的所有特殊字符?
【问题讨论】:
在方法调用后写入文件并使用正则表达式确保没有您不想要的特殊字符。或者将文件内容与包含您希望达到的结果的文件进行比较。
【讨论】:
fakefs gem 适合这种事情。
在您的规范设置中(通常是 spec_helper.rb):
require 'fakefs/spec_helpers'
RSpec.configure do |config|
config.treat_symbols_as_metadata_keys_with_true_values = true
config.include FakeFS::SpecHelpers, fakefs: true
end
这是正在测试的代码。此函数删除所有标点符号:
require 'tempfile'
def remove_special_characters_from_file(path)
contents = File.open(path, 'r', &:read)
contents = contents.gsub(/\p{Punct}/, '')
File.open(path, 'w') do |file|
file.write contents
end
end
最后是规范:
require 'fileutils'
describe 'remove_special_characters_from_file', :fakefs do
let(:path) {'/tmp/testfile'}
before(:each) do
FileUtils.mkdir_p(File.dirname(path))
File.open(path, 'w') do |file|
file.puts "Just a regular line."
end
remove_special_characters_from_file(path)
end
subject {File.open(path, 'r', &:read)}
it 'should preserve non-puncuation' do
expect(subject).to include 'Just a regular line'
end
it 'should not contain punctuation' do
expect(subject).to_not include '.'
end
end
因为我们用 fakefs 标记了这个测试的描述块,所以没有发生实际的文件系统活动。文件系统是假的,都在内存中。
【讨论】: