2

Behaveを使用していくつかのテストを実装し始めています。既存の単体テスト (より多くの機能テスト) の一部を置き換えたいと考えています。これらのいくつかは assertRaises を使用して、バックエンド サービスへの特定の呼び出しでエラーが発生することを確認します。Behave (または Gherkin) で同様のものを使用することは可能ですか?

次の単体テストはバックエンド サービスを呼び出しますが、ゲストがログオンしているため、管理タスク (do_admin_task) を実行できません。例外が発生するはずです。

def test_mycall(self):
    service = myservice('guest', 'pwd')
    self.assertRaises(NoPermission, service.do_admin_task, some_param)

機能ファイルでは、シナリオをどのように作成しますか? このような?

scenario: test guest can't do an admin task
   given I log on to my service as guest / pwd
    when I try to perform my admin task
    then it should fail saying NoPermission

これにより、 whenステップですでに例外が発生するため、 thenステップにも到達しないと思います。

これに関して私が想像できる 1 つの方法は、これらの両方のステップを実行し、例外処理を行う特定のステップを作成することです。ただし、低レベルの呼び出しでエラーをモックしたい場合は、これらの手順の多くを書き直す必要があります。これは、最初に Behave に切り替えることで回避したいと考えていることです。

これにどのようにアプローチすればよいですか?

4

1 に答える 1

1

Gherkin レベルで考えると、例外はwhenステップの予想される結果です。したがって、ステップ定義には try ブロックがあり、結果/例外をコンテキストに格納する必要があります。thenステップは、この結果/例外を確認できます。

@When(u'I try to perform my admin task')
def step_impl(context):
  try:
    context.admintaskresult = myservice(context.user, context.pass)
    context.admintaskexception = None
  except Exception as ex:
    context.admintaskresult = None
    context.admintaskexception = ex

@Then(u'it should fail saying NoPermission')
def step_impl(context):
    assert isinstance(context.admintaskexception, NoPermissionException)
于 2016-04-13T11:01:25.283 に答える