首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >单元测试非常简单的功能

单元测试非常简单的功能
EN

Stack Overflow用户
提问于 2016-09-19 15:09:09
回答 3查看 742关注 0票数 2

假设我对表单有一个简单的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def square(x):
    return x**2

如果我编写了测试正确性的单元测试,那么这样做是否被认为是错误的做法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test_square(self):
        for _ in range(50):
            rand_num = random.uniform(-10,10)
            self.assertAlmostEqual(square(rand_num), rand_num**2, msg= "Failed for input: {}".format(rand_num))

从本质上讲,我不是在编写手册用例,而是在某种意义上重写单元测试中的函数?为什么或者为什么这不被认为是好的做法。

我假设还有其他的测试来检查无效的输入和其他东西;我问的是非常具体的测试函数正确性的情况。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-19 15:17:11

随机输入几乎不是你想要的。如果您的测试有时成功,但由于测试生成的随机输入不同,而在其他测试上失败,则不会有多大帮助。

您只需要测试最低限度,以确保正确的结果。如果有错误或回归,则根据需要添加其他测试。

这就足够了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test():
    assert square(3) == 9

注意,测试不依赖于任何特定的实现细节(也就是说,它只包括计算出来的9,而不是3**2)。通常,您希望您的测试具有尽可能少的依赖关系和复杂性。通常,您尝试一次测试一件事情,而更少的依赖关系意味着您实际上是在测试您想要的东西,而不是与某些依赖项的交互。

如果您注意到一个带有负数的错误,那么您可以添加一个额外的测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def test():
    assert square(3) == 9
    assert square(-3) == 9

通常情况下,人们会在开发完该功能之后添加单元测试,或者在一开始就尝试创建整个单元测试功能。

最好的方法通常是一次测试一个特性,每次添加一个特性,然后一起开发测试和功能。

票数 6
EN

Stack Overflow用户

发布于 2016-09-19 15:21:36

通过将代码逐字复制到测试中,您实际上并不是在检查任何假设。在那一点上这是一个重言式。将单元测试分解为test inputfunction outputexpected output,您正在测试函数应该如何与实际实现一起工作的假设。

因为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
assert function(input)  == function(input) 

总是真实的,你实际上是在伤害自己,因为你的测试服永远不会报告回归,即使它们是被引入的。

票数 2
EN

Stack Overflow用户

发布于 2016-09-20 22:58:15

您正在尝试使用property base testing编写测试。它是一种有效的算法测试方法。Haskell.quickcheck是第一个实现。

它除了生成随机数(在指定的属性空间中)之外,还减少了集合,以便于调试失败的测试。

你很幸运: Python有一个QuickCheck

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39583408

复制
相关文章
Selenium处理下拉列表
在执行Selenium自动浏览器测试时,很多时候需要处理下拉菜单。下拉菜单通常用于表单中,在节省空间和防止用户在表单中选择错误的选项时非常有用。因此在测试任何网站或访问表单时,如何使用Selenium处理下拉列表显得尤为重要。
FunTester
2020/07/22
6.1K0
使用xmllint处理/验证xml
xmllint是一个很方便的处理及验证xml的工具,linux下只要安装libxml2就可以使用这个命令,下面整理一些常用功能
跑马溜溜的球
2020/12/07
1.7K0
Python笔记(二):列表+列表数据处理+函数
#才疏学浅,难免有不恰当之处,请不吝指正,谢谢。 #适合初学者。     列表的数据自下而上堆放(形成一个堆栈),类似于其他编程语言的数组。例如: user = ["张三","李四","王五"] 王五 李四 张三 使用[]中括号偏移量访问列表数据: print(user[0])        输出: 张三 print(user[1])        输出:李四 print(user[2])        输出:王五 (一)列表常用的一些方法: append() :在
free赖权华
2018/04/27
8840
python列表处理效率对比测试
Python列表添加元素效率测试 #!/usr/bin/env import datetime class adair: def test1(n): lst=[] for i in range(n*10000): lst = lst + [i] return lst def test2(n): for i in range(n*10000): lst = lst.append(i
py3study
2020/01/13
4810
[接口测试_B] 10 requests处理SSL证书验证
可以看到,将verify设为False后,可以跳过ssl验证,但存在一个告警信息InsecureRequestWarning。要忽略这个告警信息可以怎么做呢?
苦叶子
2018/07/25
1.8K0
[接口测试_B] 10 requests处理SSL证书验证
java javaGui事件处理用户验证
package mmm; import java.awt.Dimension; import java.awt.Frame; import java.awt.Toolkit; import java.awt.GridLayout; import java.awt.Panel; import java.awt.Label; import java.awt.FlowLayout; import java.awt.TextField; import java.awt.Button; import java.aw
葫芦
2019/05/09
6490
Opencv:验证码图像处理
首先安装 opencv :(点击链接查看) https://blog.csdn.net/weixin_43582101/article/details/88660570
李玺
2021/11/22
4710
Opencv:验证码图像处理
简单的注册模块表单验证处理
表单具有 onsubmit = "return check()"行为,处理验证情况
书童小二
2018/09/03
3.3K0
简单的注册模块表单验证处理
验证码的处理 google recaptcha
google验证码的第三方处理 #经过批量测试,成功率高达百分之九十,1000个邮箱大概4美金,比较实惠 第一部分. 通过请求youtube简介页面,获取网红的channel_id和页面产生的ses
用户8346838
2021/03/10
1.4K0
PHP 后端表单验证和请求处理
创建好前端的联系表单视图后,接下来,我们来编写提交表单后后端的 PHP 处理逻辑。
学院君
2020/09/28
2.6K0
PHP 后端表单验证和请求处理
Java对List列表进行分组处理(对List列表固定分组/对List列表平均分组)
将一组数据平均分成n组 即:数据分组数固定为N,每组数据个数不定,每组个数由List列表数据总长度决定 /** * 将一组数据平均分成n组 * * @param source 要分组的数据源 * @param n 平均分成n组 * @param <T> * @return */ public static <T> List<List<T>> averageAssign(List<T> source, int n) { List<List<T>> result = new Ar
目的地-Destination
2023/03/06
3.5K0
Pandas的列表值处理技巧,避免过多循环加快处理速度
这里有一些技巧可以避免过多的循环,从而获得更好的结果 图1 -标题图像。 您曾经处理过需要使用列表的数据集吗?如果有,你就会明白这有多痛苦。如果没有,你最好做好准备。 如果你仔细看,你会发现列表无
deephub
2020/10/19
1.9K0
Pandas的列表值处理技巧,避免过多循环加快处理速度
Vue基础:条件渲染、列表渲染、事件处理
那么在上面的代码中切换 loginType 将不会清除用户已经输入的内容。因为两个模板使用了相同的元素, 不会被替换掉——仅仅是替换了它的 placeholder。
奋飛
2021/08/30
7850
Python中的数据处理(列表)——(二)
Q1:上次留了一个问题,那就是元组中的数据是不可变的,那么列表中的元素可以改变吗?
Gorit
2021/12/09
1.3K0
Python中的数据处理(列表)——(二)
【译】在列表视图中处理空值
本篇文章主要针对两类开发者。第一个是曾遇到过IllegalArgumentException: Path must not be empty问题的开发者。第二个则是当ListView使用了未被完整加载的图像,应用程序仍能正确运转的开发者们。
小鄧子
2018/08/20
1.2K0
python处理列表和字典的小技巧
一、获取字典中value最大对应的key key = max(my_dict, key=my_dict.get) 例子 二、 从列表或字典中随机选取一个元素 import random 2.1 从列表中随机选取一个元素 random_value = random.choice(my_list) 2.2 从字典中随机选取一个元素的键或值 random_key = random.choice( list( my_dict.keys() ) ) random_value = random.choice(
SL_World
2021/09/18
1.1K0
【说站】python处理数字列表的函数
(1)range()函数的参数不仅包括开始位置和终止位置,还指定步骤长度,也就是说,我们可以使用该函数生成等参数列。
很酷的站长
2022/11/23
6290
【说站】python处理数字列表的函数
8.13 Selenium Cookie与验证码处理
不少网站在用户登录、用户提交信息等登录和输入的页面上使用了验证码技术。验证码技术可以有效防止恶意用户对网站的滥用,使得网站可以有效避免用户信息失窃、保证网站稳定安全性。
清风穆云
2021/08/09
6290
Python实战图片验证码降噪处理
图片验证码算是网络数据采集上的一道拦路虎,虽然有诸多公开的ORC接口、云打码平台,一旦大规模应用起来,还是内部写程序进行识别处理比较好。
州的先生
2019/11/06
3.2K0
Vue基础:条件渲染、列表渲染、事件处理
那么在上面的代码中切换 loginType 将不会清除用户已经输入的内容。因为两个模板使用了相同的元素,<input> 不会被替换掉——仅仅是替换了它的 placeholder。
奋飛
2019/08/15
1.9K0

相似问题

AttributeError:“函数”对象没有属性“拆分”。我怎么才能修好它?

27

AttributeError:'NoneType‘对象没有属性'attrs’

30

Dropzonejs对象对象错误我怎么才能修好它?

12

我怎么才能修好它?

17

我得到了AttributeError:'NoneType‘对象没有属性’查找‘

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文