GVKun编程网logo

unittest.py无法与trace.py配合使用-为什么?(python无法pip)

10

在这篇文章中,我们将带领您了解unittest.py无法与trace.py配合使用-为什么?的全貌,包括python无法pip的相关情况。同时,我们还将为您介绍有关assertRaises为什么不使用

在这篇文章中,我们将带领您了解unittest.py无法与trace.py配合使用-为什么?的全貌,包括python无法pip的相关情况。同时,我们还将为您介绍有关assertRaises为什么不使用python unittest捕获我的属性错误?、C#Transform类的介绍与Unity配合使用、pycharm 右键无法显示 unittest 框架 && 解决右键只有 unittest 运行如何取消右键显示进行普通 run、Pytest和Unittest在Python中的区别是什么?的知识,以帮助您更好地理解这个主题。

本文目录一览:

unittest.py无法与trace.py配合使用-为什么?(python无法pip)

unittest.py无法与trace.py配合使用-为什么?(python无法pip)

哇。我今晚发现,使用该unittest模块编写的Python单元测试不能很好地与该trace模块下的覆盖率分析配合使用。这是最简单的单元测试foobar.py

import unittestclass Tester(unittest.TestCase):    def test_true(self):        self.assertTrue(True)if __name__ == "__main__":    unittest.main()

如果使用来运行此命令python foobar.py,则会得到以下输出:

 .----------------------------------------------------------------------Ran 1 test in 0.000sOK

大。现在,我也想执行覆盖率测试,因此我再次使用来运行它python -m trace --count -C . foobar.py,但是现在我得到了:

----------------------------------------------------------------------Ran 0 tests in 0.000sOK

不,Python,这不行-您没有运行我的测试!似乎在trace某种程度上破坏了unittest测试检测机制。这是我想出的(疯狂)解决方案:

import unittestclass Tester(unittest.TestCase):    def test_true(self):        self.assertTrue(True)class Insane(object):    passif __name__ == "__main__":    module = Insane()    for k, v in locals().items():        setattr(module, k, v)    unittest.main(module)

从根本上讲,这是一种变通方法,可以通过伪造顶层模块的副本来对其进行抽象化,从而使顶层模块的名称无法命名。然后,我可以将该名称传递unittest.main()给以回避对其产生的任何影响trace。无需显示输出;看起来就像上面的成功示例。

因此,我有两个问题:

  1. 这里发生了什么?为什么要trace搞砸unittest呢?

  2. 有没有更容易和/或更少疯狂的方法来解决此问题?

答案1

小编典典

一个更简单的解决方法是将模块的名称显式传递给unittest.main

import unittestclass Tester(unittest.TestCase):    def test_true(self):        self.assertTrue(True)if __name__ == "__main__":    unittest.main(module=''foobar'')

trace``unittest由于trace其运行模块的负载方式而使测试发现混乱。trace读取模块源代码,对其进行编译,然后在__name__全局设置为的上下文中执行该模块''__main__''。这足以使大多数模块的行为就像被称为主模块一样,但实际上并不会更改__main__在Python解释器中注册的模块。当unittest要求__main__模块扫描测试用例时,它实际上trace是从命令行调用的模块,该模块当然不包含单元测试。

coverage.py采用的实际替换该模块称为一种不同的方法__main__sys.modules

assertRaises为什么不使用python unittest捕获我的属性错误?

assertRaises为什么不使用python unittest捕获我的属性错误?

我正在尝试运行此测试:self.assertRaises(AttributeError,branch[0].childrennodes)和和branch[0没有属性childrennodes,因此它应该抛出an
AttributeErrorassertRaises应该捕获该属性,但是当我运行测试时,测试失败了,因为它抛出了AttributeError

Traceback (most recent call last):  File "/home/tttt/../tttt/tests.py", line 504, in test_get_categories_branch    self.assertRaises(AttributeError, branch[0].children_nodes)AttributeError: ''Category'' object has no attribute ''children_nodes''

有任何想法吗?

答案1

小编典典

我认为是因为assert引发仅接受可赎回。它评估看可调用对象是否引发异常,而不是语句本身是否引发异常。

self.assertRaises(AttributeError, getattr, branch[0], "childrennodes")

应该管用。

编辑:

正如THC4k正确地说的那样,它在收集时收集语句,然后将出错,而不是在测试时。

这也是为什么我喜欢鼻子的原因,它有一个装饰器(提花器),对于这种测试有用且更清晰。

@raises(AttributeError)def test_1(self)    branch[0].childrennodes

C#Transform类的介绍与Unity配合使用

C#Transform类的介绍与Unity配合使用

主要用于物体的旋转移动和缩放
一、成员变量
position:在世界空间坐标transform的位置。
localPosition:相对于父级的变换的位置。如果该变换没有父级,那么等同于Transform.position。
eulerAngles:世界坐标系中的旋转(欧拉角)。
localEulerAngles:相对于父级的变换旋转角度。
right:世界坐标系中的右方向。(世界空间坐标变换的红色轴。也就是x轴。)
up:世界坐标系中的上方向。(在世界空间坐标变换的绿色轴。也就是y轴。)
forward:世界坐标系中的前方向。(在世界空间坐标变换的蓝色轴。也就是z轴。)
rotation:世界坐标系中的旋转(四元数)。
localRotation:相对于父级的变换旋转角度。
localScale:相对于父级的缩放比例。
parent:父对象Transform组件。
worldToLocalMatrix:矩阵变换的点从世界坐标转为自身坐标(只读)。
localToWorldMatrix:矩阵变换的点从自身坐标转为世界坐标(只读)。
root:对象层级关系中的根对象的Transform组件。
childCount:子对象数量。
lossyScale:全局缩放比例(只读)。
二、成员函数:
1、LookAt函数
public void LookAt(Transform target)
public void LookAt(Vector3 worldPosition);
public void LookAt(Vector3 worldPosition, Vector3 worldUp = Vector3.up);
public void LookAt(Transform target, Vector3 worldUp = Vector3.up);
旋转物体,使物体的z轴指向target/worldPosition,对于worldUp的描述是,在完成上面的旋转之后,继续旋转自身,使得当前对象的正y轴朝向与worldUp所指向的朝向一致。
这里的朝向一致指的是新旋转后的y轴与worldUp在该对象初次旋转后的xy平面上的投影向量一致。之所以取投影是因为第一次旋转使物体的z轴指向target/worldPosition后,此时的worldUp向量可能不在xy平面上,要在z轴指向target/worldPosition前提下是y轴朝向与worldUp一致,只能取worldUp在xy平面上的投影。
注意:使用worldPosition向量时要注意方向,一定是target-transform.position,顺序反了会使物体背向目标;若使用Transform作为参数,则不必注意。默认情况下,worldUp是Vector3.up(世界坐标系下的y轴)
2、Rotate函数

public void Rotate(Vector3 eulerAngles);
public void Rotate(Vector3 eulerAngles, Space relativeTo = Space.Self);
public void Rotate(float xAngle, float yAngle, float zAngle);
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);
旋转一个欧拉角度,它按照zxy的顺序进行旋转,默认情况下局部坐标系下Space.Self

public void Rotate(Vector3 axis, float angle);
public void Rotate(Vector3 axis, float angle,Space relativeTo = Space.Self);
绕axis轴旋转angle角度,默认情况下局部坐标系下Space.Self。
transform.rotation和Rotate有个区别:
Rotate()方法是:旋转多少度。在原有的基础上累加,即旋转了多少角度。又旋转了多少角度,是在原有的基础上在旋转
rotation属性是:旋转到某个角度,就是是在update中每帧都执行。但每次旋转到的角度都是5,所以是旋转到5度。一直都是
比如你只想让他旋转到多少, 用rotation; 假如想让他一直转,可以用Rotate
rotation直接改变了数值, 以达到旋转效果
Rotate应用一个的旋转角度每秒1度慢慢的旋转物体
当然:rotation()还可以通过插值旋转

 


 

pycharm 右键无法显示 unittest 框架 && 解决右键只有 unittest 运行如何取消右键显示进行普通 run

pycharm 右键无法显示 unittest 框架 && 解决右键只有 unittest 运行如何取消右键显示进行普通 run

上面是普通文件和 unittest 导入的文件右键快捷键显示情况,可以看出两者快捷键都是 ctr+shift+F10, 如果你是右键模式想运行 unitest, 但是又不知道哪里配置 unittest 直接运行快捷键 ctr+shift+F10 就会实现 unitest 执行

,如果你想取消文件 unittest 配置只需要,修改配置就可以如下点击下拉箭头点击 editconfig:

 

 点击 defaults. 下面 python tests

选取 unitest 框架,点击添加配置加号:

 修改 Name 自定义选取 script,填入对应要配置 unitest 的 py 文件脚本绝对路径,ok 保存

 

快捷键或者右键运行 unitetest ok:

有配置就有取消,取消 unittest 配置就是返回配置页面去掉 python tests 中配置的选项:

 

 恢复普通 run 运行:

另外,除了上面配置除外,在 settings 下也可以实现 unittest 以及 pytest 配置:

 

 

Pytest和Unittest在Python中的区别是什么?

Pytest和Unittest在Python中的区别是什么?

1.安装和使用

在安装方面, unittest肯定更好, 因为不用安装。 unittest属于python标准库, 装python的时候就安装了。 而pytest的安装需要通过pip安装即可,也不算复杂。 以上是安装,那么使用呢?

在使用上Pytest更加灵活,可以在命令行中使用各种选项来执行测试,而Unittest则需要在脚本中编写测试用例并使用Unittest模块来运行测试。这一点上Pytest加分较多。

2.编写测试用例

Pytest和Unittest在编写测试用例方面也有一些区别。相对于Unittest而言,Pytest的测试用例编写更加简洁。Pytest使用Python的assert关键字来断言测试结果,而Unittest则需要使用assertEqual、assertTrue等方法来进行断言。

下面是一个使用Pytest编写的测试用例示例,测试用例的目的是测试下面的类:

class Calculator:  
    def add(self, a, b):  
        return a + b  
  
    def subtract(self, a, b):  
        return a - b
登录后复制

如果用Pytest编写

立即学习“Python免费学习笔记(深入)”;

import pytest  
  
from Calc import Calculator  
  
  
@pytest.mark.parametrize("a, b, expected", [  
    (2, 3, 5),  
    (0, 0, 0),  
    (-1, 1, 0),  
])  
def test_calculator_add(a, b, expected):  
    calculator = Calculator()  
    assert calculator.add(a, b) == expected
登录后复制

而使用Unittest编写的相同测试用例则为:

import unittest  
  
from Calc import Calculator  
  
  
class TestCalculator(unittest.TestCase):  
    def test_calculator_add(self):  
        calculator = Calculator()  
        self.assertEqual(calculator.add(2, 3), 5)  
        self.assertEqual(calculator.add(0, 0), 0)  
        self.assertEqual(calculator.add(-1, 1), 0)
登录后复制

Unittest必须创建测试类, 所以绝大多数场景下,讨论代码简洁性Pytest要更加的加分。 而且我们可以对比一下输出:

下面是Pytest的输出结果

============================= test session starts =============================collecting ... collected 3 itemstest_calc.py::test_calculator_add[2-3-5] PASSED                          [ 33%]test_calc.py::test_calculator_add[0-0-0] PASSED                          [ 66%]test_calc.py::test_calculator_add[-1-1-0] PASSED                         [100%]============================== 3 passed in 0.01s ==============================

下面是Unittest的输出结果

============================= test session starts =============================
collecting ... collected 1 item

u.py::TestCalculator::test_calculator_add PASSED                         [100%]

============================== 1 passed in 0.01s ==============================

对比发现,pytest会输出详细的结果, 而unittest给出的是整体的判断。 所以,从友好性上来说也是Pytest更胜一筹。

3.自动发现测试用例

Pytest能够自动发现测试用例,这意味着我们不需要手动编写代码来标识哪些测试用例应该被执行。而Unittest则需要在脚本中手动指定测试用例的执行顺序和执行方式。

4.插件和扩展

Pytest具有丰富的插件和扩展,可以用于增强测试框架的功能。而Unittest则相对简单,没有Pytest那样多的扩展。

5.运行速度

在运行速度方面,Pytest比Unittest更快。这是因为Pytest能够并行执行测试用例,而Unittest则只能按照顺序依次执行测试用例。

6.报告

Pytest和Unittest都能够生成测试报告,但是Pytest的测试报告更加友好和易读。Pytest的测试报告包含了测试用例的执行结果、时间、失败信息等,而Unittest的测试报告则相对简单。

7.社区支持

Pytest拥有一个庞大的社区支持,因此在使用Pytest时,可以轻松地找到相关的文档和解决方案。相比之下,Unittest的社区支持相对较小。

总的来说,Pytest比Unittest更加灵活、简单,并且具有更多的扩展。如果你想要快速编写测试用例并且需要更多的扩展功能,那么Pytest会是更好的选择。但是如果你需要更多的控制和精细化的测试,那么Unittest可能更加适合你。

以上就是Pytest和Unittest在Python中的区别是什么?的详细内容,更多请关注php中文网其它相关文章!

今天关于unittest.py无法与trace.py配合使用-为什么?python无法pip的分享就到这里,希望大家有所收获,若想了解更多关于assertRaises为什么不使用python unittest捕获我的属性错误?、C#Transform类的介绍与Unity配合使用、pycharm 右键无法显示 unittest 框架 && 解决右键只有 unittest 运行如何取消右键显示进行普通 run、Pytest和Unittest在Python中的区别是什么?等相关知识,可以在本站进行查询。

本文标签: