gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:33:20 24 4
gpt4 key购买 nike

我正在尝试将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com