在python中的multi if期间返回响应

时间:2016-07-22 11:52:34

标签: python unit-testing flask

我正在做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循环吗?请帮帮我?

2 个答案:

答案 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.")

一般来说,制作代码"可单元测试"让它更好。