关于烘干这个的建议?

2024-04-27 00:49:17 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在写一些代码来帮助探索集合论。我也在测试这个代码py.试验,其中我还相对缺乏经验(这也是我使用它的部分原因)。你知道吗

所以现在我正在研究关系,我有所有这些关系,它们都是抽象关系类的子类(例如自反关系、交换关系、传递关系等等)。这些关系中的许多都有类似的检验,如下所示。我想把它浓缩起来,这样我就不必每次添加新的关系时都重复这个过程。由于这种草率的安排,我已经遇到了错误。你知道吗

我考虑过一些不同的方法,但我不确定它们是否能与py.试验建筑。我想知道一个更有经验的py.试验用户可以提供一些关于这方面的建议(或者至少给我指出正确的手册来阅读)。你知道吗

class TestRelation:
    __testing__ = "Relation"

    def test_abstactness(self):
        with pytest.raises(TypeError):
            relation.Relation(np.equal, '=')

class TestReflexiveRelation(TestRelation):
    def test_set_creation(self):
        with pytest.raises(relation.FalseRelationError) as fre:
            relation.ReflexiveSet(1)
        assert fre.value.message == "Relation must be a ReflexiveRelation"

    def test_subclassing(self):
        assert issubclass(relation.ReflexiveRelation, relation.Relation),\
            "ReflexiveRelation should be a subclass of Relation. It is not."

class TestCommutativeRelation:
    def test_set_creation(self):
        with pytest.raises(relation.FalseRelationError) as fre:
            relation.CommutativeSet(1)
        assert fre.value.message == "Relation must be a CommutativeRelation"

    def test_subclassing(self):
        assert issubclass(relation.CommutativeRelation, relation.Relation),\
            "ReflexiveRelation should be a subclass of Relation. It is not."

Tags: pytestself关系pytestdefwithassert
1条回答
网友
1楼 · 发布于 2024-04-27 00:49:17

我认为这些参数化装置就是答案。谢谢@jme!你知道吗

 test_relations = [
        (relation.ReflexiveRelation, relation.ReflexiveSet),
        (relation.TransitiveRelation, relation.TransitiveSet),
        (relation.CommutativeRelation, relation.CommutativeSet)
    ]

    class TestRelation:
        __testing__ = "Relation"

        def test_abstactness(self):
            with pytest.raises(TypeError):
                relation.Relation(np.equal, '=')

        @pytest.mark.parametrize("ARelation, ASet", test_relations)
        def test_incorrect_set_creation(self, ARelation, ASet):
            with pytest.raises(relation.FalseRelationError) as fre: 
                ASet(1)
            assert fre.value.message == "Relation must be a " + ARelation.__name__

相关问题 更多 >