web-dev-qa-db-ja.com

Seleniumでのアサートと検証

Seleniumが実行するチェックは通常、assertFooとverifyFooの2つのフレーバーで行われます。 assertFooはテストケース全体で失敗するのに対し、verifyFooはそのチェックの失敗を記録し、テストケースを続行できることを理解しています。

したがって、verifyFooを使用すると、1つの条件が失敗した場合でも、複数の条件のテスト結果を取得できます。一方、私が失敗したチェックの1つは、私の編集がコードを壊し、とにかくそれらを修正しなければならないことを知るのに十分です。

だから私の質問は:
どの具体的な状況で、2つの方法のどちらをチェックする方が好ましいですか。あなたの見方を動機づけるあなたの経験は何ですか?

16
jammon

テストへのエントリポイント(「ゲートウェイ」)としてassert()を使用します。アサーションに合格した場合にのみ、verify()チェックが実行されます。たとえば、一連のアクションの結果としてウィンドウのコンテンツをチェックしている場合、ウィンドウの存在をassert()し、次にコンテンツをverify()します。

私が頻繁に使用する例-jqgridでの推定のチェック:assert()グリッドの存在、およびverify()推定。

16
rs79

私は使用することで克服されたいくつかの問題に遭遇しました

assert*()

の代わりに

verify*()

たとえば、フォームの検証でフォーム要素をチェックする場合は、

verifyTrue(...);

Assertをverifyに置き換えると、期待どおりに機能します。

Assert *()を使用することを強くお勧めします。

3
Harsha H P

本番システムでSeleniumテストを実行していて、たとえば個人アカウントではなくテストユーザーとしてログインしていることを確認したい場合は、適切なユーザーがログインしてからトリガーすることをお勧めします。偶然に使用された場合、意図しない影響を与えるであろう行動。

2
Heiko Haller

通常は、テストケースごとに1つのアサーションに固執する必要があります。この場合、違いは、実行する必要があるティアダウンコードに要約されます。しかし、おそらくこれを_@After_メソッドに配置する必要があります。

私はSeleneseTestBaseのverify*()メソッドでかなりの数の問題を抱えていました(たとえば、それらはSystem.out.println()を使用し、com.thoughtworks.Selenium.SeleneseTestBase.assertEquals(Object, Object)は期待どおりに動作しません)。それらの使用をやめました。

1
artbristol