如何使用LocalBearTestHelper测试您的熊¶
Coala有一个非常棒的测试框架,可以轻松地为熊编写测试。
您可以使用以下内容来测试您的熊市:
LocalBearTestHelper.check_validity
LocalBearTestHelper.check_results
verify_local_bears
通过实例理解¶
让我们了解如何为其编写测试 TooManyLinesBear
在里面 some_dir
. TooManyLinesBear
检查文件是否小于或等于 max_number_of_lines
线。 max_number_of_lines
默认情况下为10。
from coalib.results.Result import Result
from coalib.bears.LocalBear import LocalBear
class TooManyLinesBear(LocalBear):
def run(self,
filename,
file,
max_number_of_lines: int=10):
"""
Detects if a file has more than ``max_number_of_lines`` lines.
:param max_number_of_lines:
Maximum number of lines to be allowed for a file. Default is 10.
"""
if len(file) > max_number_of_lines:
yield Result(self, 'Too many lines')
示例1 使用 verify_local_bear
from bears.some_dir.TooManyLinesBear import TooManyLinesBear
from coalib.testing.LocalBearTestHelper import verify_local_bear
good_file = '1\n2\n3\n4\n'.splitlines()
bad_file = '1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n'.splitlines()
TooManyLinesBearTest = verify_local_bear(TooManyLinesBear,
valid_files=(good_file,),
invalid_files=(bad_file,))
good_file
是您的熊认为没有违反样式的文件,并且 bad_file
是至少有一个错误/警告/信息的文件。我们需要写一份 good_file
其小于或等于 max_number_of_lines
线条和 bad_file
它拥有的不仅仅是 max_number_of_lines
行,并将它们馈送到 verify_local_bear
作为输入与您的Bear(在本例中为TooManyLinesBear)和一些附加参数一起使用。
备注
good_file
和 bad_file
序列是不是就像 file
. 一 file
是输入文件的序列。
示例2 使用 LocalBearTestHelper.check_validity
from queue import Queue
from bears.some_dir.TooManyLinesBear import TooManyLinesBear
from coalib.testing.LocalBearTestHelper import LocalBearTestHelper
from coalib.settings.Section import Section
from coalib.settings.Setting import Setting
class TooManyLinesBearTest(LocalBearTestHelper):
def setUp(self):
self.section = Section('name')
self.section.append(Setting('max_number_of_lines', '10'))
self.uut = TooManyLinesBear(self.section, Queue())
def test_valid(self):
self.check_validity(self.uut, ["import os"])
def test_invalid(self):
self.check_validity(self.uut, bad_file, valid=False)
备注
bad_file
此处与相同 bad_file
在上面的例子中。
check_validity
如果您的熊用字符串列表对特定检查没有产生任何结果,则断言。第一个a 截面 和你的熊(在这种情况下 TooManyLinesBear
是 setUp
。现在你的 截面 默认情况下包含 设置 。您可以将任何 设置 这取决于你的测试。通过将要检查的BEAR、行作为参数传递给(如有必要,传递一些其他参数)来验证检查 check_validity
。该方法 self.check_validity(self.uut, ["import os"])
断言如果你的熊 self.uut
当字符串列表出现时,不会生成结果 ["import os"]
已经过去了。该方法 self.check_validity(self.uut, bad_file, valid=False)
断言如果你的熊 self.uut
在以下情况下会产生结果 bad_file
通过。
示例3 使用 LocalBearTestHelper.check_results
from queue import Queue
from bears.some_dir.TooManyLinesBear import TooManyLinesBear
from coalib.testing.LocalBearTestHelper import LocalBearTestHelper
from coalib.results.Result import Result
from coalib.settings.Section import Section
class TooManyLinesBearTest(LocalBearTestHelper):
def setUp(self):
self.uut = TooManyLinesBear(Section('name'), Queue())
def test_run(self):
self.check_results(
self.uut,
file,
[Result.from_values('TooManyLinesBear',
'Too many lines',
'filename')],
settings={'max_number_of_lines': 20})
check_results
如果您的Bear结果与在CLI上执行时的实际结果匹配,则断言。就像上面的例子一样,我们需要 setUp
一 截面 还有你的熊和一些 设置 . check_results
通过给出您当地的熊、要检查的行和预期结果作为输入来验证您的结果。 check_results
断言如果您的熊在检查 file
与…相匹配 Results.from_values(...)
.
最后一个音符¶
LocalBearTestHelper
是为了减轻对熊的测试。确保您的测试具有100%的覆盖率和零冗余。使用 check_results
尽可能多地测试你的熊。
术语表¶
uut
-测试中的设备