具有多个断言的Presenter First Unittest



我正在尝试将Presenter First方法用于新项目。我发现自己有下面的单元测试。我在这个测试中包含了这么多断言,是不是利用了糟糕的单元测试实践?如果是,问题是我的测试方法还是presenter.setOverview的实现方法?换句话说,setOverview方法是否应该调用self.setSalesQty而不是self.view.setSalesQty?在这种情况下,我将对present.setSalesQty进行单独的测试,而testSetOverview测试将不再需要担心测试这一点。

def testSetOverview(self):
    # set up mock objects
    p = PropertyMock()
    type(self.mock_model).descriptions = p
    self.mock_model.getData.side_effect = [5, 10]
    self.mock_model.getDescription.side_effect = 'Description'
    # get required variables
    end = dt.date.today()
    start = dt.date(year=end.year, month=1, day=1)
    pn = 'abcd'
    # call presenter method
    self.presenter.setOverview(pn)
    # test to make sure proper calls were made
    model_getData_calls = [call(pn=pn, start=start, end=end,
                       data=self.mock_model.SHIPPED_QUANTITY),
                   call(pn=pn, start=start, end=end,
                        data=self.mock_model.PRICE_PAID)]
    self.mock_model.getData.assert_has_calls(model_getData_calls, any_order=True)
    assert self.mock_model.getDescription.called
    self.mock_view.setSalesQty.assert_called_with(val=5)
    self.mock_view.setSalesDols.assert_called_with(val=10)
    self.mock_view.setDescription.assert_called_with(val='Description')

因此,通常在编写单元测试时,您希望测试一个特定的东西。因为当你写更多的代码而测试失败时,你会更容易理解单元测试失败的原因。到目前为止,您所做的断言可能是在测试代码的一种行为或功能,那么断言就可以了。

举个例子,下面有两个函数list_counter依赖于word_count。因此,在测试list_counter时,可以做出两个断言,以确保list_counter中的两个组件是正确的。但单独测试word_count可能更明智。

def word_count(word):
    return len(word)
def list_counter(listing=None):
    total = 0
    for l in listing:
        total += word_count(l)
    return (len(listing), total)

很难对你的案例做出更具体的评论,因为我无法了解模型的外观。self.mock_view也突然出现。

相关内容

  • 没有找到相关文章

最新更新