python单元测试编写
<p> 做一个简单的小实例:</p><p> 目录结构如下:<img src="https://img2018.cnblogs.com/blog/1496566/201905/1496566-20190512160649874-492651896.png" alt="" width="229" height="133"></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">demo1.py
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MyClass():
</span><span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self,x,y):
self.x </span>=<span style="color: rgba(0, 0, 0, 1)"> x
self.y </span>=<span style="color: rgba(0, 0, 0, 1)"> y
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> add(self):
</span><span style="color: rgba(0, 0, 255, 1)">return</span> self.x +<span style="color: rgba(0, 0, 0, 1)"> self.y
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> sub(self):
</span><span style="color: rgba(0, 0, 255, 1)">return</span> self.x - self.y</pre>
</div>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> unittest
</span><span style="color: rgba(0, 0, 255, 1)">from</span> unittset_demo.demo1 <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> MyClass
</span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MyclassTest(unittest.TestCase):
</span><span style="color: rgba(0, 0, 255, 1)">def</span> setUp(self) -><span style="color: rgba(0, 0, 0, 1)"> None:
</span><span style="color: rgba(128, 0, 0, 1)">'''</span><span style="color: rgba(128, 0, 0, 1)">
测试之前的准备工作
:return:
</span><span style="color: rgba(128, 0, 0, 1)">'''</span><span style="color: rgba(0, 0, 0, 1)">
self.clac </span>= MyClass(4,3<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">def</span> tearDown(self) -><span style="color: rgba(0, 0, 0, 1)"> None:
</span><span style="color: rgba(128, 0, 0, 1)">'''</span><span style="color: rgba(128, 0, 0, 1)">
测试之后的收尾
如关闭数据库
:return:
</span><span style="color: rgba(128, 0, 0, 1)">'''</span>
<span style="color: rgba(0, 0, 255, 1)">pass</span>
<span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_add(self):
ret </span>=<span style="color: rgba(0, 0, 0, 1)"> self.clac.add()
self.assertEqual(ret,</span>9<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_sub(self):
ret </span>=<span style="color: rgba(0, 0, 0, 1)"> self.clac.sub()
self.assertEqual(ret,</span>-1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">if</span> <span style="color: rgba(128, 0, 128, 1)">__name__</span> == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">__main__</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
suite </span>=<span style="color: rgba(0, 0, 0, 1)"> unittest.TestSuite()
suite.addTest(MyclassTest(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test_add</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
suite.addTest(MyclassTest(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test_sub</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
runner </span>=<span style="color: rgba(0, 0, 0, 1)"> unittest.TextTestRunner()
runner.run(suite)</span></pre>
</div>
<p> </p>
<p> setUp就是帮我们做测试前的准备工作,比如实例化等,</p>
<p>tearDown可以帮我们关闭数据库等收尾操作,</p>
<p>一般测试方法必须以test_开头,里面可以写我们需要测试的业务逻辑,同时指定self.assertEqual()将我们的结果和运行的实际结果进行比对。</p>
<p>suite就是我们的测试集,之后添加测试用例,用runner实例化运行。</p>
<p> </p>
<p>运行结果:</p>
<p><img src="https://img2018.cnblogs.com/blog/1496566/201905/1496566-20190512161400260-1155680449.png" alt="" width="1123" height="376"></p>
<p>如果我们将预计的结果写错,</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_add(self):
ret </span>=<span style="color: rgba(0, 0, 0, 1)"> self.clac.add()
self.assertEqual(ret,</span>2<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_sub(self):
ret </span>=<span style="color: rgba(0, 0, 0, 1)"> self.clac.sub()
self.assertEqual(ret,</span>3)</pre>
</div>
<p>运行结果:</p>
<p><img src="https://img2018.cnblogs.com/blog/1496566/201905/1496566-20190512161652787-1430999669.png" alt="" width="884" height="699"></p>
<p> </p>
<p> 同时我们还可以在django的test文件中测试自己的用例:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> StudentTest(TestCase):
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setUp(self);
Student.objects.create(name</span>=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jack</span><span style="color: rgba(128, 0, 0, 1)">'</span>,age=13<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_student_create(self):
obj </span>= Student.objects.get(name=<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jack</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
self.assertEqual(obj.age,</span>18)</pre>
</div>
<p> </p>
<p> 测试是使用的模板是否正确,在terminal中输入:python manage.py test 即可测试</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> HomeTest(TestCase):
</span><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> test_home_page_renders_home_template(self):
response </span>= self.client.get(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/home/</span><span style="color: rgba(128, 0, 0, 1)">'</span>) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 模拟浏览器</span>
<span style="color: rgba(0, 0, 0, 1)">
self.assertEqual(response.status_code,</span>200<span style="color: rgba(0, 0, 0, 1)">)
self.assertTemplateUsed(response,</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">home.html</span><span style="color: rgba(128, 0, 0, 1)">'</span>)</pre>
</div>
<p> </p>
<p> </p><br><br>
来源:https://www.cnblogs.com/jimmyhe/p/10852764.html
頁:
[1]