Python GNUs Coreutils和x27的差异测试;fmt&x27;效用
我正在探索各种测试策略(差分、回归、单位等),并被分配了测试GNUPython GNUs Coreutils和x27的差异测试;fmt&x27;效用,python,automated-tests,gnu,word-wrap,gnu-coreutils,Python,Automated Tests,Gnu,Word Wrap,Gnu Coreutils,我正在探索各种测试策略(差分、回归、单位等),并被分配了测试GNUCoreutils实用程序的任务。我正在尝试应用随机差异测试并创建一个oracle,以便断言所描述的实用程序的后条件已经满足 我想做的是创建一个Python实用程序,它生成一个随机字符串,对字符串应用文本换行(最大为给定的行宽)以生成预期的输出,然后对生成的字符串调用fmt实用程序并断言输出与预期的输出匹配。为此,我尝试利用Python模块。但是,我还没有找到一种方法来确保保持缩进。考虑一个文件(文件.txt),内容 \s\s\
Coreutils
实用程序的任务。我正在尝试应用随机差异测试并创建一个oracle,以便断言所描述的实用程序的后条件已经满足
我想做的是创建一个Python实用程序,它生成一个随机字符串,对字符串应用文本换行(最大为给定的行宽)以生成预期的输出,然后对生成的字符串调用fmt实用程序并断言输出与预期的输出匹配。为此,我尝试利用Python模块。但是,我还没有找到一种方法来确保保持缩进。考虑一个文件(文件.txt),内容
\s\s\s\sLorem ipsum dolor sit amet, consectetuer-adipiscing elit. Curabitur dignissim venenatis pede. Quisque dui dui, ultricies ut, facilisis non, pulvinar non.
作为fmt实用程序的输入。调用命令fmt-w 50 file.txt
将导致输出:
\s\s\s\sLorem ipsum dolor sit amet,
\s\s\s\sconsectetuer-adipiscing elit. Curabitur
\s\s\s\sdignissim venenatis pede. Quisque dui dui,
\s\s\s\sultricies ut, facilisis non, pulvinar non.
根据fmt公用设施文件 默认情况下,将显示空行、单词之间的空格和缩进 保存在输出中;连续输入行具有不同的 压痕未连接;选项卡在输入时展开并引入 关于输出 fmt更喜欢在句末断行,并尝试 避免在句子的第一个单词后或第一个单词前换行 一句话的最后一个字。断句是指句子的结尾或结尾 指以“?!”结尾的段落或单词,接着是两个 空格或行尾,忽略任何插入的括号或引号 在尝试模拟与fmt实用程序相同的输出行为时,我决定使用textwrap模块函数,如下所示:
textwrap.fill(in_str, width=50, expand_tabs=True, drop_whitespace=False, fix_sentence_endings=True, break_on_hyphens=False)
根据Python文档,它应该执行以下操作:
\s\s\s\sLorem ipsum dolor sit amet,
consectetuer-adipiscing elit. Curabitur dignissim
venenatis pede. Quisque dui dui, ultricies ut,
facilisis non, pulvinar non. Duis quis arcu a
purus volutpat iaculis. Morbi id dui in diam
ornare dictum. Praesent consectetuer vehicula
ipsum. Praesent tortor massa, congue et, ornare
in, posuere eget, pede.
如您所见,缩进级别没有保持
我可以最好地利用什么工具和/或差异测试策略来最有效地测试fmt实用程序?非常感谢您的任何建议!尝试使用
py.test运行此代码段。
:
#!/usr/bin/env python2.7
from textwrap import TextWrapper
input_tx = """\s\s\s\sLorem ipsum dolor sit amet, consectetuer-adipiscing elit. Curabitur dignissim venenatis pede. Quisque dui dui, ultricies ut, facilisis non, pulvinar non."""
output_tx1 = """\s\s\s\sLorem ipsum dolor sit amet, consectetuer-
\s\s\s\sadipiscing elit. Curabitur dignissim
\s\s\s\svenenatis pede. Quisque dui dui, ultricies
\s\s\s\sut, facilisis non, pulvinar non."""
output_tx2 = """\s\s\s\sLorem ipsum dolor sit amet,
\s\s\s\sconsectetuer-adipiscing elit. Curabitur
\s\s\s\sdignissim venenatis pede. Quisque dui dui,
\s\s\s\sultricies ut, facilisis non, pulvinar non."""
class Test_TextWrapper:
def test_stackoverflow_q32753000_1(self):
sut = TextWrapper(width=50, subsequent_indent="\s\s\s\s")
assert sut.fill(input_tx) == output_tx1
def test_stackoverflow_q32753000_2(self):
sut = TextWrapper(width=50, subsequent_indent="\s\s\s\s",
fix_sentence_endings=False,
break_on_hyphens=False)
assert sut.fill(input_tx) == output_tx2
它应该向您展示如下内容:
> py.test -v -k Test_TextWrapper
============================================== test session starts ===============================================
platform linux2 -- Python 2.7.11, pytest-2.9.0, py-1.4.31, pluggy-0.3.1 -- /usr/bin/python
cachedir: .cache
...
plugins: cov-2.2.1
collected 6 items
test_fmt.py::Test_TextWrapper::test_stackoverflow_q32753000_1 PASSED
test_fmt.py::Test_TextWrapper::test_stackoverflow_q32753000_2 PASSED
=================================== 4 tests deselected by '-kTest_TextWrapper' ===================================
===================================== 2 passed, 4 deselected in 0.03 seconds =====================================
如您所见,我的第二个测试用例生成的输出与所示相同
以你的问题为例
我目前正在为Python标准库textwrap.TextWrapper
类编写一个小型Python包装类
一个新的前缀
关键字参数,将初始缩进
和后续缩进
参数的效果与
从输入文本中删除前缀。(类似于-p
选项
在寻找现有技术和
灵感我在这里找到了你的问题。尝试使用
py.test运行此代码段。
:
#!/usr/bin/env python2.7
from textwrap import TextWrapper
input_tx = """\s\s\s\sLorem ipsum dolor sit amet, consectetuer-adipiscing elit. Curabitur dignissim venenatis pede. Quisque dui dui, ultricies ut, facilisis non, pulvinar non."""
output_tx1 = """\s\s\s\sLorem ipsum dolor sit amet, consectetuer-
\s\s\s\sadipiscing elit. Curabitur dignissim
\s\s\s\svenenatis pede. Quisque dui dui, ultricies
\s\s\s\sut, facilisis non, pulvinar non."""
output_tx2 = """\s\s\s\sLorem ipsum dolor sit amet,
\s\s\s\sconsectetuer-adipiscing elit. Curabitur
\s\s\s\sdignissim venenatis pede. Quisque dui dui,
\s\s\s\sultricies ut, facilisis non, pulvinar non."""
class Test_TextWrapper:
def test_stackoverflow_q32753000_1(self):
sut = TextWrapper(width=50, subsequent_indent="\s\s\s\s")
assert sut.fill(input_tx) == output_tx1
def test_stackoverflow_q32753000_2(self):
sut = TextWrapper(width=50, subsequent_indent="\s\s\s\s",
fix_sentence_endings=False,
break_on_hyphens=False)
assert sut.fill(input_tx) == output_tx2
它应该向您展示如下内容:
> py.test -v -k Test_TextWrapper
============================================== test session starts ===============================================
platform linux2 -- Python 2.7.11, pytest-2.9.0, py-1.4.31, pluggy-0.3.1 -- /usr/bin/python
cachedir: .cache
...
plugins: cov-2.2.1
collected 6 items
test_fmt.py::Test_TextWrapper::test_stackoverflow_q32753000_1 PASSED
test_fmt.py::Test_TextWrapper::test_stackoverflow_q32753000_2 PASSED
=================================== 4 tests deselected by '-kTest_TextWrapper' ===================================
===================================== 2 passed, 4 deselected in 0.03 seconds =====================================
如您所见,我的第二个测试用例生成的输出与所示相同
以你的问题为例
我目前正在为Python标准库textwrap.TextWrapper
类编写一个小型Python包装类
一个新的前缀
关键字参数,将初始缩进
和后续缩进
参数的效果与
从输入文本中删除前缀。(类似于-p
选项
在寻找现有技术和
灵感我在这里找到了你的问题