新しいプロジェクトにPresenter-Firstアプローチを利用しようとしています。私は以下のunittestで自分自身を見つける。私は、このテストで非常に多くのアサーションを含めることで、貧弱なユニットテストの慣行を利用していますか?はいの場合は、テストへの私のアプローチやpresenter.setOverviewの実装に問題がありますか?つまり、setOverviewメソッドはself.view.setSalesQtyではなくself.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')
self.mock_viewとself.mock_modelについての詳しい情報は意図的ではありません。これらは模擬オブジェクトであり、そのように(私の理解では)テスト中ではありません。プレゼンター自体はテスト中で、これらの2つのオブジェクトに依存し、それらを使用して作業を行います。 – wesanyer
はい、テストするべきではありませんが、それらが表現しているオブジェクトを見ることで、テストの書き方についてのアドバイスが得られます。 – Jonathan
十分です。しかし、私が取っていたアプローチは、「プレゼンターの最初のもの」に合わせて、プレゼンターのユニットテストと実装を先に書くことでした。モデルやビューのために何かを書く前に。私はプレースホルダーとしてモックに潜んでいました。プレゼンターのテストと実装を書いた後、モデルとビューユニットのテストと実装を開始する場所として模擬メソッド呼び出しを使用しました。これは非定型ですか? – wesanyer