从代码中简单了解单元测试(Java的JUnit和Python的unittest)

前言

这段学习了很多文档,其中就包括单元测试。所以,这里写一篇博客来记录和巩固学到的知识。

1. Java的JUnit 4

使用Eclipse创建一个Java Project:
从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第1张图片

JUnitTesting.java

package testing;

public class JUnitTesting {
	public int squre(int n) {
		return n*n;
	}
	
	public int countA(String words) {
		int count = 0;
		String wordsToLower = words.toLowerCase();
		for(int i=0; i < words.length(); i++) {
			if (wordsToLower.charAt(i) == 'a') {
				count++;
			}
		}
		return count;
	}
}
  • 创建第一个单元测试:
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第2张图片
    选择如下(最新的是JUnit 5,不过因为后面创建运行所有测试的类会失败,所以选择JUnit4):
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第3张图片
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第4张图片
    实例代码:
    5的平方=25,但是这里给的参数是23,所以结果应该是失败。
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第5张图片
    邮件Run as:
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第6张图片
    修改为25:
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第7张图片

  • 创建第二个单元测试:
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第8张图片
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第9张图片

  • 创建一个运行所有的单元测试的类(我不知道怎么称呼。。。):
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第10张图片
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第11张图片
    运行:
    你会发现运行了两个单元测试:
    从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第12张图片

2. Python的unittest

为了简化操作,这里就不编写用于测试的源代码,直接测试Python的字典。

import unittest

class TestDict(unittest.TestCase):

    def test_init(self):
        # 赋值后,字典中是否有对应的键和值
        d = dict(a=1, b='test')
        self.assertEqual(d['a'], 1)
        self.assertEqual(d['b'], 'test')
        self.assertTrue(isinstance(d, dict))

    def test_key(self):
        # 赋值后,字典中是否有对应的键和值
        d = dict()
        d['key'] = 'value'
        self.assertEqual(d['key'], 'value')

    def test_attr(self):
        # 赋值后,字典中是否有对应的键和值
        d = dict()
        d['key'] = 'value'
        self. assertEqual('key' in d, True)
        self. assertEqual(d['key'], 'value')

    def test_keyerror(self):
        # 是否存在指定的key
        d = dict()
        with self.assertRaises(KeyError):
            value = d['empty']

    def test_attrerror(self):
        # 测试是否存在属性、方法
        d = dict()
        with self.assertRaises(AttributeError):
            value = d.empty
运行(blog_unittest.py 是文件, 运行命令不需要.py后缀):

python -m unittest blog_unittest
从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第13张图片
运行原理是,会自动运行所有test_xxx 开始的方法。另外的两个方法,会在每个test_xxx运行前和运行后分别执行,
setUpClass 和 tearDownClass只会在运行前和运行后执行一次,可以用于数据库连接和关闭
如:

import unittest

class TestDict(unittest.TestCase):

    def test_init(self):
        # 赋值后,字典中是否有对应的键和值
        d = dict(a=1, b='test')
        self.assertEqual(d['a'], 1)
        self.assertEqual(d['b'], 'test')
        self.assertTrue(isinstance(d, dict))

    def test_key(self):
        # 赋值后,字典中是否有对应的键和值
        d = dict()
        d['key'] = 'value'
        self.assertEqual(d['key'], 'value')

    def test_attr(self):
        # 赋值后,字典中是否有对应的键和值
        d = dict()
        d['key'] = 'value'
        self. assertEqual('key' in d, True)
        self. assertEqual(d['key'], 'value')

    def test_keyerror(self):
        # 是否存在指定的key
        d = dict()
        with self.assertRaises(KeyError):
            value = d['empty']

    def test_attrerror(self):
        # 测试是否存在属性、方法
        d = dict()
        with self.assertRaises(AttributeError):
            value = d.empty

    def setUp(self):
        print("setUp...")

    def tearDown(self):
        print("tearDown...")

    def setUpClass():
        print("初始化数据库连接")

    def tearDownClass():
        print("关闭数据库连接")

一共5组:
从代码中简单了解单元测试(Java的JUnit和Python的unittest)_第14张图片

参考:

Java:https://www.youtube.com/watch?v=I8XXfgF9GSc
Python:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140137128705556022982cfd844b38d050add8565dcb9000

完!

你可能感兴趣的:(Python,JAVA)