python - 具有多个断言的 Presenter-First 单元测试

标签 python unit-testing presenter-first

我正在尝试将 Presenter-First 方法用于新项目。我发现自己在下面进行单元测试。我是否通过在此测试中包含如此多的断言来利用糟糕的单元测试实践?如果是,问题是我的测试方法还是 presenter.setOverview 的实现?换句话说,setOverview 方法应该调用 self.setSalesQty 而不是 self.view.setSalesQty 吗?在这种情况下,我会对 presenter.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 也突然出现了。

关于python - 具有多个断言的 Presenter-First 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33924676/

相关文章:

python - 返回值未显示在 Swagger-UI 中

python - 优化一个 numpy ndarray 索引操作

python - 永远运行 asyncio 事件循环的 pythonic 方式是什么?

python - Spark MapPartitionRDD 无法打印值

javascript - 如何使用 Jest 模拟第三方库

unit-testing - 使用 Material 图标和图像进行 Angular 2 单元测试

android - Android 中的单元测试?

c# - 半复杂页面上的 MVP

design-patterns - 在 Presenter First 中,为什么接口(interface)上的 SubscribeSomeEvent 方法优于普通的旧事件?