10

NUnit +依存メソッド+テスト実行の順序を検索しながら、SOに関する多数の回答を読みました。すべての答えは、単体テストの順序を強制することは非常に悪いことを示唆しています。

NUnit を使用して Selenium テストを作成しています。だから私はユニットテストフレームワークを使って統合テストを書こうとしています!!!

統合テストの例を挙げます (これはほんの一例です)。他のテストに進む前に、有効なアカウントを作成する必要があります。アカウントの作成に失敗した場合は、テストの実行全体を中止したいと思います。

テストのアルファベット順と NUnit の真の精神に依存したくないので、それ以上のテストの前にアカウントを作成することにしました。2つの主な理由から、私には正しく見えませんが-

  1. 不要なコード複製・実行
  2. アプリケーション アカウントの作成が機能しない場合、すべてのテストでアカウントの作成とアカウントの作成が何度も試行され、失敗します。

私は、NUnit は Selenium のテストでは適切ではないかもしれないと考える傾向があります。しかし、Nunit ではない場合、何を使用すればよいでしょうか?

4

5 に答える 5

2

テストごとに新しいアカウントを作成する必要がある場合、私がとるアプローチは、そのコードをセットアップ コードに移動することです。ログインを必要としないテストがある場合は、それらを別のファイルに分割します。

重複部分はすべて削除する必要があり、テスト コードは製品コードと同じくらいクリーンで堅牢でなければなりません。異なるテストでファイルを分割すると、単一の責任の考え方を維持するのに役立ちます。

于 2011-04-17T20:25:19.413 に答える
2

Selenium Core 自体には Javascript で記述された TestRunner が付属しており、ブラウザーから直接テストを実行できます。

詳細については、次を参照してください。

http://www.developerfusion.com/article/84484/light-up-your-development-with-selenium-tests/

それとは別に、C# で記述された Nunit とテストを使用すると、記述と保守がはるかに簡単になります。テストの作成中に SetUp と TearDown を使用していますか? そうすれば、コードの重複を避けることができます。

2番目のポイントについては、最初のセットアップの失敗時に設定され、次回セットアップをスキップするフラグ、またはセットアップ自体がそれを追跡して次回すぐに失敗するフラグを持つことができます。また、Nunit でセットアップが失敗した場合、テストは実行されません。

于 2011-04-17T18:53:44.887 に答える
2

私は常に NUnit で Selenium を実行しています。それは、テストの書き方に依存します。コードの重複を避けるために、サイトへのログインやログアウトなどの一般的なことを行うヘルパー関数のライブラリを作成します。これは、他のテストがテストする必要のあるページに到達するために使用します。(私は「ライブラリ」という用語を大まかな意味で使用しています。実際にそれらを独自の C# プロジェクトに分割しているわけではありません。)

アカウント作成機能が壊れていると、他のテストが失敗することは間違いありません。しかし、個人的には、単体テストのポイントは、変更がプロジェクトの他の場所に意図しない影響を与えていないことを確認することであるため、それは問題ではないと思います。アカウントの作成が失敗した場合、明らかに多くのことに影響します。ログイン ヘルパー メソッドが失敗した場合も同様です。ログインできない場合は、サイト内のどこにもアクセスできません。事実上、サイト全体が壊れています。

于 2011-04-17T19:09:51.883 に答える
1

AutomatedTesterへの回答として説明する問題については、次の2つのアプローチが役立つ場合があります。

まず、NUnit 2.4.4は、必要な順序でテストを実行できるSuiteAttributeを定義します。非常に便利ですが、大きな制限があります。TestCaseAttributeとは互換性がありません。つまり、すべてのテストはTestAttributeによってのみトリガーされる必要があります。これは、値ベースの境界テスト(したがって、いくつかのデータ駆動型テストケース)の対象範囲をターゲットにする場合は非常に厄介です。http://www.nunit.org/index.php?p=suite&r=2.5.10の詳細

もう1つのアプローチは、テストケース専用に調整された統合サンプルデータベースを準備することです。15ステップの登録プロセスがあるとします。学生レコードを作成してステップ1にプッシュし、次に別の学生をプッシュしてステップ2にプッシュします。データベースを保存し、テストフィクスチャのセットアップとして復元します。次に、別の生徒で各ステップをテストします。

ほとんどの場合、ステップごとに異なるレコードで統合テストを実行することは完全に有効です。これは、機能ごとおよびコードごとに同じカバレッジを提供し、DB内のレコードは(UIによって作成された)真のレコードであるため、統合テストの考え方に従います。 UIに付属するすべての欠陥があります)。

もちろん、DBコピーを保存する必要があるため、実行に時間がかかり、ストレージスペースが必要になります。システムにそれを許容できない場合は、おそらく最初の解決策を検討することをお勧めします。

また、前のステップが不安定な場合でも、後のステップでバグを見つけることができるという利点があります。すべてのテストは各テストキャンペーンで実行されますが、要求するソリューションには当てはまりません。

于 2012-02-20T23:26:00.493 に答える
1

PNunitも見ましたか?

この質問の回答の 1 つを参照してください。

C# Selenium RC テストを並行して実行する方法を見つけた人はいますか?

TestNG がグリッドでどのように機能するかはまだ 100% わかりません。3 ステップの登録プロセスがあり、これを 3 つのテストに分割するとします。TestNG with grid はここで役に立ちますか? または、テスト C がテスト A と B を同じスレッドで実行する必要があることを検出しますか?

PNunit は、依存するテストを同じマシンに配布する方法を提供できるようです。セットアップはおそらくかなり複雑ですが。

于 2011-04-21T00:49:04.950 に答える