1

我需要对一种方法进行单元测试,该方法可以删除所有特殊字符,,例如:和一些空格。

被测方法将文件的每一行存储在单独的数组位置。

如何测试该方法是否删除了文本文件的所有特殊字符?

4

2 回答 2

1

在您的方法调用之后编写文件并使用正则表达式以确保没有您不想要的特殊字符。或者将文件内容与包含您希望达到的结果的文件进行比较。

于 2013-07-11T01:26:25.197 回答
0

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标记了这个测试的 describe 块,所以没有发生实际的文件系统活动。文件系统是假的,都在内存中。

于 2014-02-21T18:45:39.957 回答