1

Selenium と NUnit を使用して統合テストを作成しようとしているときに、いくつかの問題が発生しています。

NUnit テストで Selenium RC を使用して ASP.NET Web アプリを駆動しようとしていますが、実際のユーザーが行うすべてのことを実際に DB で実行するようにテストしたいと考えています。当然のことながら、Selenium がそれを行った後にデータベースがロールバックされればいいのですが、db には ui からのデータを含む新しい行 (など) が含まれていると主張しました。

だから、ここに私が持っているセットアップがあります(ある種の疑似コードで):

TestMethod()
{
    Using(new TransActionScope)
    {
        Selenium.StartSelenium()
        Selenium.SelectAndClickAndDoStuffInUI()
        AssertSomething()
    }
}

ここで、SelectAndClickAndDoStuffInUI メソッドが UI 内でクリックし、独自のデータ フレームワークを起動します。私たちのフレームワークはすべてのものを db に書き込み、AssertSomething メソッドは db ですべてが正常であることをアサートします。フレームワークは、内部の仕組みでトランザクション (「必須」) を使用します。

それで、すべて大丈夫ですよね?いいえ、残念ながら違います。上記の例の TransActionScope はコミットされるべきではありません (そこに txScope.Complete() 呼び出しはありません)。したがって、すべての内部トランザクションもロールバックされるはずですよね? そうではなく、Selenium が UI を通じて行うことはすべて DB にコミットされます。

これがどこでうまくいかないのかを本当に理解しようとしましたが、これまでのところ答えが見つかりませんでした。

読んでくれてありがとう、そして(最後に)これ​​が実際の質問です:

私の例で示したケースで TransactionScope がロールバックされないのはなぜですか?

状況とセットアップに関する追加情報を喜んで提供します!

4

1 に答える 1

3

ASP アプリに UI を使用しています。これは、テストが行​​った変更をロールバックできないことを意味します。

トランザクション スコープは、独自のプロセスでのみ機能します。トランザクション マネージャはどのようにして Web インターフェイス内のクリックを元に戻すことができますか? それはどこにでもありえます。Selenium はブラウザをリモート コントロールするだけです。

モック オブジェクトを使用して「実際の」単体テストを作成し、データベースにはまったくアクセスしないでください。通常のaspページでは少し難しいですが、asp.MVCを見てこの問題の解決策を見つけることはできません。

于 2009-09-22T07:14:46.503 に答える