如何使用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_filebad_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 截面 和你的熊(在这种情况下 TooManyLinesBearsetUp 。现在你的 截面 默认情况下包含 设置 。您可以将任何 设置 这取决于你的测试。通过将要检查的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 -测试中的设备