相关疑难解决方法(0)

如何在Python中编写自定义`.assertFoo()`方法?

我正在使用Python为我的应用程序编写一些测试用例unittest.现在我需要将一个对象列表与另一个对象列表进行比较,以检查第一个列表中的对象是否是我所期望的.

如何编写自定义.assertFoo()方法?它该怎么办?它应该在失败时引发异常吗?如果是,哪个例外?以及如何传递错误信息?错误消息应该是unicode字符串还是字节串?

不幸的是,官方文档没有解释如何编写自定义断言方法.

如果你需要一个真实的例子,继续阅读.


我写的代码有点像这样:

def assert_object_list(self, objs, expected):
    for index, (item, values) in enumerate(zip(objs, expected)):
        self.assertEqual(
            item.foo, values[0],
            'Item {0}: {1} != {2}'.format(index, item.foo, values[0])
        )
        self.assertEqual(
            item.bar, values[1],
            'Item {0}: {1} != {2}'.format(index, item.bar, values[1])
        )

def test_foobar(self):
    objs = [...]  # Some processing here
    expected = [
        # Expected values for ".foo" and ".bar" for each object
        (1, 'something'),
        (2, 'nothing'),
    ]
    self.assert_object_list(objs, expected)
Run Code Online (Sandbox Code Playgroud)

这种方法使得以非常紧凑的方式描述每个对象的期望值非常容易,并且无需实际创建完整对象.

但是......当一个对象未​​通过断言时,不会比较其他对象,这会使调试变得更加困难.我想编写一个自定义方法,无条件地比较所有对象,然后显示所有失败的对象,而不是只显示第一个.

python unit-testing

36
推荐指数
2
解决办法
7677
查看次数

如何运行所有PyTest测试,即使其中一些测试失败了?

我正在寻找一种在PyTest中运行所有单元测试的方法,即使其中一些测试失败了.我知道必须有一个简单的方法来做到这一点.我检查了CLi选项,并通过这个网站查找类似的问题/答案,但没有看到任何东西.对不起,如果已经回答了这个问题.

例如,请考虑以下代码片段,其中包含PyTest代码:

def parrot(i):
    return i

def test_parrot():
    assert parrot(0) == 0
    assert parrot(1) == 1
    assert parrot(2) == 1
    assert parrot(2) == 2
Run Code Online (Sandbox Code Playgroud)

默认情况下,执行在第一次失败时停止:

$ python -m pytest fail_me.py 
=================== test session starts ===================
platform linux2 -- Python 2.7.10, pytest-2.9.1, py-1.4.31, pluggy-0.3.1
rootdir: /home/npsrt/Documents/repo/codewars, inifile: 
collected 1 items 

fail_me.py F

=================== FAILURES ===================
___________________ test_parrot ___________________

    def test_parrot():
        assert parrot(0) == 0
        assert parrot(1) == 1
>       assert parrot(2) == 1
E       assert 2 == 1
E        +  where …
Run Code Online (Sandbox Code Playgroud)

python pytest

14
推荐指数
4
解决办法
9513
查看次数

单元测试中的多个断言

我刚刚读完了Roy Osherove的"单元测试艺术",我正在努力坚持他在书中列出的最佳实践.其中一个最佳实践是不在测试方法中使用多个断言.这个规则的原因对我来说相当清楚,但它让我怀疑......

如果我有一个像这样的方法:

public Foo MakeFoo(int x, int y, int z)
{
     Foo f = new Foo();
     f.X = x;
     f.Y = y;
     f.Z = z;

     return f;
}
Run Code Online (Sandbox Code Playgroud)

我是否真的必须编写单独的单元测试以声明Foo的每个单独属性是否使用提供的值进行初始化?在测试方法中使用多个断言真的很少见吗?

仅供参考:我正在使用MSTest.

编辑:感谢所有的回复.我想我最终将继续使用多个断言.在我的情况下,正在测试的行为是MakeFoo制作一个合适的Foo.因此断言每个属性都达到预期值就足够了.但是,如果设置其中一个属性存在条件,那么我将分别测试每个单独的结果.

我仍然不喜欢它....我喜欢每次测试一个断言的想法是你知道测试失败的确切原因.如果您解决了问题,那么测试将通过.有多个断言,您没有相同的保证.如果你修复了失败的断言所提到的问题,那么在测试中的下一次失败就没有什么可以阻止另一个断言了.如果断言被分开,那么你从一开始就知道两个失败.

最后,我不仅仅使用.Equals()的原因是因为在我的情况下,Foo是一个LINQ-To-SQL实体,它引入了一些不值得进入的并发症.

再次感谢.

unit-testing assert mstest

12
推荐指数
2
解决办法
5105
查看次数

Python测试框架,支持非致命故障

我正在评估自动系统测试的"测试框架"; 到目前为止,我正在寻找一个python框架.在py.test或鼻子中,我看不到类似于我从谷歌测试框架中知道的EXPECT宏.我想在一次测试中做出几个断言,而不是在第一次失败时中止测试.我在这些框架中遗漏了什么,或者这不起作用?有没有人对可用于自动化系统测试的python测试框架有什么建议?

python testing assert nose

5
推荐指数
1
解决办法
1238
查看次数

标签 统计

python ×3

assert ×2

unit-testing ×2

mstest ×1

nose ×1

pytest ×1

testing ×1