我正在做unit testing,我正在检查两个数据库集合中的字段,因此在此期间我必须执行多个if条件,如下所示:
for doc1,doc2 in itertools.izip(docs1, docs2):
if ... :
if ... :
response = 'Error'
else:
response = 'OK'
else... :
if ... :
response = 'Error'
else:
response = 'OK'
if ... :
if ... :
response = 'Error'
else ... :
response = 'OK'
else ... :
if ... :
response = 'Error'
else ... :
response = 'OK'
所以我想声明一个响应,如果错误发生在其中一个ifs中,给出这样的答案:
self.assert400(response, message="Bad request, empty body.")
当整个过程可以给出Ok回复时。
我想要的只是避免写这个:
if ... :
if ... :
self.assert400(response, message="Bad request, empty body.")
else:
self.assert200(response, message="OK.")
else... :
if ... :
self.assert400(response, message="Bad request, empty body.")
else:
self.assert200(response, message="OK.")
那要实现这个目标呢?
我想在最后创建一个if条件但是这不会停止for循环吗?请帮帮我?
答案 0 :(得分:0)
在这种情况下,您应该考虑使用默认值并仅检查错误情况:
response = "OK" # default value
for doc1,doc2 in itertools.izip(docs1, docs2):
if ... :
if ... :
response = "Error"
else... :
if ... :
response = "Error"
if response == "Error":
break
# If no errors were found, then the result must be OK
if response == "Error":
self.assert400(response, message="Bad request, empty body.")
else:
self.assert200(response, message="OK.")
这实现了只有一个错误足以使整个事情失败。我对你真正想做的事情有点不清楚,所以如果这不符合预期,请做评论。
答案 1 :(得分:0)
在我看来,你并不是真的进行单元测试。功能和单元测试中的结构完全相同。因此,如果您的代码发生变化,测试也必须改变。我不认为测试" ="操作员值得你花时间。
我可能错了,但我认为你应该有一个函数服用doc1和doc2并返回一个响应。然后,您可以对特定输入值的返回值进行单元测试。像这样:
result = foo(doc1,doc2)
self.assert_equal(result.message, "Bad request, empty body.")
result = foo(doc3,doc4)
self.assert_equal(result.message, "OK.")
一般来说,制作代码"可单元测试"让它更好。