TestLoader类中提供的discover()方法

calculator.py
class Count:    def __init__(self,a,b):        self.a = int(a)        self.b = int(b)

    #计算加法    def add(self):        return self.a + self.b

    #计算减法    def sub(self):        return self.a - self.b

runtest.py

import unittest# 加载测试文件import testaddimport testsub

# 构造测试集suite = unittest.TestSuite()suite.addTest(testadd.TestAdd("test_add"))suite.addTest(testadd.TestAdd("test_add2"))suite.addTest(testsub.TestSub("test_sub"))suite.addTest(testsub.TestSub("test_sub2"))if __name__ == ‘__main__‘:    # 执行测试    runner = unittest.TextTestRunner()    runner.run(suite)

"""这样的拆分带来了好处,可以根据不同的功能创建不同的测试文件,甚至是不同的测试目录,测试文件中还可以将不同的小功能划分为不同的测试类,在类下编写测试用例,整体结构更加清晰。这样的设计看上去很完美,但依然没有解决添加用例的问题,当用例达到成百上千条时,在runtest.py文件中通过addTest()添加/删除测试用例就变得非常麻烦,那么有没有方法让unitest单元测试框架自动识别测试用例呢?答案是肯定的,TestLoader类中提供的discover()方法可以解决这个问题。"""

testadd.py

from calculator import Countimport unittestclass TestAdd(unittest.TestCase):    def setUp(self):        print("test case start")

    def tearDown(self):        print("test case end")

    def test_add(self):        j = Count(2,3)        self.assertEqual(j.add(),5)

    def test_add2(self):        j = Count(41, 76)        self.assertEqual(j.add(), 117)

if __name__ == ‘__main__‘:    unittest.main()

TestLoader类中提供的discover()方法.py

"""discover(start_dir,pattern=test*py‘,top level dir=None)找到指定目录下所有测试模块,并可递归查到子目录下的测试模块,只有匹配到文件名才能被加载。如果启动的不是顶层目录,那么顶层目录必须单独指定。·start_dir:要测试的模块名或测试用例目录。·patern=-test*.py:表示用例文件名的匹配原则。此处匹配文件名以“test”开头的“.py”类型的文件,星号“*”表示任意多个字符。·top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None。现在通过discover()方法重新实现runtest.py文件的功能。"""

import unittest#定义测试用例的目录为当前目录:test_dir = "./"discover = unittest.defaultTestLoader.discover(test_dir,pattern="test*.py")if __name__ == ‘__main__‘:    runner = unittest.TextTestRunner()    runner.run(discover)

"""discover()方法会自动根据测试目录(test_dir)匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件中,因此,可以直接通过run()方法执行discover,大大简化了测试用例的查找与执行。"""

testsub.py

from calculator import Countimport unittestclass TestSub(unittest.TestCase):    def setUp(self):        print("test case start")

    def tearDown(self):        print("test case end")

    def test_sub(self):        j = Count(2, 3)        self.assertEqual(j.sub(),-1)

    def test_sub2(self):        j = Count(71, 46)        self.assertEqual(j.sub(),25)

if __name__ == ‘__main__‘:    unittest.main()
 

原文地址:https://www.cnblogs.com/zhang-da/p/12210601.html

时间: 2024-09-30 02:01:23

TestLoader类中提供的discover()方法的相关文章

Effective C++ 条款15、16 在资源管理类中提供对原始资源的访问||成对使用new 与 delete要采取相同形式

1.在资源管理类中提供对原始资源的访问     前几个条款很棒,它们是对抗资源泄露的壁垒,但很多APIs直接指向 资源,这个时候,我们需要直接访问原始资源.     这里,有两种方法解决上述问题,我们可将RAII对象转换为原始资源.通过 显式转换与隐式转换.     通常,tr1:: shared_ptr 和 auto_ptr 都提供一个get成员函数,用来执行显式转换,也就是返回智能指针内部的原始指针的复件.因为它也重载了指针取值操作符* –>.当然也可以通过隐式转换为底部原始指针.     

UnSafe类中的一些重要方法

UnSafe类中的一些重要方法 JDK中的rt.jar保重Unsafe类中提供了硬件级别的原子性操作,Unsafe类中的方法都是navtice方法,他们使用JNI的方式访问C++实现库,下面我们来了解一下Unsafe提供的几个主要方法以及编程时如何使用Unsafe类做一些事情. long objectFieldOffset(Field field)方法:返回指定变量所属类中的内存偏移量,该偏移量仅在使用该Unsafe函数中访问指定字节时使用.如下代码使用Unsafe获取变量value在Atomi

增加、删除类文件或者在一个类中增加、删除方法时,是不能够热部署到服务上的。这时候需要停止服务器重新部署后再启动,就不会出现上面的提示了。

Hot Code Replace Failed 2010-11-05 10:11listquiry | 浏览 14226 次 Some code changes cannot be hot swapped into a running virtual machine, such as changing method names or introducing errors into running code.The current target virtual machine {jboss4Ser

php面向对象类中常用的魔术方法

php面向对象类中常用的魔术方法 1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct() class construct{ public function __construct(){ $this->var = "this is var"; } } class con2 extends construct{ public function __construct(){ $

【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法

现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在现在的项目中使用的主要是afinal框架,而且这个框架确实比较不错,省去了不少工作量,在编写Activity的过程中,基本都是直接继承自FinalActivity类,这样可以使用这个类给我们封装好的不少的方法,但是随着项目慢慢推进,这种直接继承框架类的一些缺点也开始慢慢的显现出来.最主要的就

org.apache.commons.lang3.StringUtils类中isBlank和isEmpty方法的区别

相信很多java程序员在写代码的时候遇到判断某字符串是否为空的时候会用到StringUtils类中isBlank和isEmpty方法,这两个方法到底有什么区别呢?我们用一段代码来阐述这个区别吧: 1 @Test 2 public void blankEmpty() { 3 String str = " "; 4 System.out.println("Is empty ? " + StringUtils.isEmpty(str)); 5 System.out.pri

在类中使用Response.Redirect()方法

Insus.NET稍作演示,能正常运作.可以往下慢慢看来.首先是user类: 然后,我们在一个网页,如Default.aspx.cs实例化上面的User类. 可以看看实时操作演示: 在类中使用Response.Redirect()方法

Python 之面向对象:类和对象调用类中的变量和方法

面向对象的核心是对象,用对象来操控类里面的方法和变量,加上类还具有继承.封装.多态三大特性,提高了代码的复用性和规范性. 一.对象 调用类中的变量和方法 二 .类  调用类中的变量和方法 原文地址:https://www.cnblogs.com/tianpin/p/11283032.html

java的Object类中hashCode()和equals()方法-----转载

JAVA代码:    public static void main(String[] args)    {        Object obj1 = new Object();        Object obj2= new Object();        Object obj3 = obj2;        System.out.println("obj1==obj2 ?"+obj1.equals(obj2));        System.out.println("o