python - 我应该如何编写测试以使其不会失败?
问题描述
我正在使用烧瓶制作一些 api 端点。我想知道如何为测试设置拆解,以便两个测试,即获取特定报告和删除特定报告,不会发生冲突。这是我的代码:
模型.py
reports = [
{
"id": 1,
"createdOn": "25-11-2018 09:57",
"createdBy": 1,
"type": "Red Flag Report",
"location": "1,1",
"status": "Resolved",
"comment": "Act quickly"
},
{
"id": 2,
"createdOn": "26-11-2018 09:57",
"createdBy": 2,
"type": "Red Flag Report",
"location": "2,2",
"status": "Under investigation",
"comment": "Don't let them get away with it"
}
]
class ReportsModel():
def __init__(self):
self.db = reports
def get_specific(self, report_id):
return next(filter(lambda x: x["id"] == int(report_id), self.db), None)
def delete(self, report_index):
self.db.pop(report_index)
视图.py
from flask import Flask, request
from flask_restful import Resource
from .models import ReportsModel
class Report(Resource):
def __init__(self):
self.reports = ReportsModel()
def get(self, id):
report = self.reports.get_specific(id)
if report:
return {"status": 200, "data": [report]}
else:
return {"status": 404, "error": "Report record not found"}, 404
def delete(self, id):
report= self.reports.get_specific(id)
if report:
self.reports.delete(self.reports.db.index(report))
return {"status": 200,"data": [{"id": int(id), "message": "Report record has been deleted"}]}
else:
return {"status": 404, "error": "Report record not found"}, 404
测试报告.py
from unittest import TestCase
from flask import json
from flask_restful import request
from app import create_app
from app.api.v1.models import ReportsModel
app = create_app()
class TestReports(TestCase):
def setUp(self):
self.reports = ReportsModel()
self.app = app.test_client()
self.app.testing = True
def test_get_specific_report(self):
response = self.app.get('/api/v1/reports/1')
data = json.loads(response.data)
self.assertEqual(response.status_code, 200)
self.assertEqual(data, {"status": 200, "data": [self.reports.get_specific(1)]})
def test_delete_a_specific_report(self):
response = self.app.delete('/api/v1/reports/1')
data = json.loads(response.data)
self.assertEqual(response.status_code, 200)
self.assertEqual(data, {"status": 200, "data": [{"id": 1, "message": "Report record has been deleted"}]})
当我在 Postman 上运行代码时,它运行良好。但是,当我运行测试时,第一个测试失败,说预期的状态代码是 404 并且没有找到报告的消息。如果我将 id 2 放在两个测试中,结果是相同的。但是,如果我在一个测试中使用 1 而在另一个测试中使用 2,则测试通过。
我能做些什么来阻止测试失败吗?
编辑:我应该提到我的想法是添加一个 tearDown() 以便我可以为每个测试重置所有内容。不幸的是,到目前为止,我的想法是:
def tearDown(self):
self.reports = 0 #or some other value
但是我还没有找到合适的方法来做到这一点。
del self.reports
也没有用。
解决方案
推荐阅读
- r - 解决 R 中数据集中分类变量插补的错误
- r - 用R中的行名替换值(对应于行的顺序)
- mysql - MySQL - 最大错误返回值结果
- reactjs - 升级地狱 - Project Storm React Diagrams 的情感
- javascript - 打字稿使用“childProcess.spawn”调用终端命令,但无法从“ps -al”找到其 PID
- html - 如何使我的表格超出页面限制而不适合页面
- c - 通用数组包含在 C 中
- list - 当我有按钮列表时如何导航到差异页面
- discord.py - discord.py 如何获取用户连接的所有服务器的列表?
- javascript - 在 node.js 中动态选择对象以删除 if/else if