これらすべてのステップを特定の順序でテストしたい場合 (そして、その音によって、単一のセッションとして) は、実際には、あなたが話している受け入れテストに似ています。その場合、より複雑なテスト メソッドを記述し、各ステップの後に条件をアサートすることは罪ではありません。
各ステップを完全に分離してテストする場合 (純粋な単体テスト)、各単体テストは、他のテストを参照することなく、単独で実行できる必要があります。しかし、実際のサイト UI 自体をテストしている場合、これは実際にはオプションではありません。
もちろん、本当にすべてのテストで、他のアクションを参照せずにすべての依存関係を設定したい場合 (たとえば、最後のテストでは、ログイン トークンを偽造する必要があります。データ レイヤーは、新しいトークンを追加したふりをする必要があります)。顧客など。疑わしい利益のための多くの作業...)
これは、サーバー側のコントローラー、レイヤー、モデルなどに対して記述された単体テストが既にあり、ブラウザーで実行されている実際のサイトを参照せずに実行しているため、さまざまなバックあなたのサイトの最後の部分は、彼らがするべきことをします
あなたの場合、ハイブリッド統合/受け入れテストをもっとお勧めします
void Login(IWebDriver driver)
{
//use driver to open browser, navigate to login page, type user/password into box and press enter
}
void CreateNewCustomer(IWebDriver driver)
{
Login(driver);
//and then use driver to click "Create Customer" link, etc, etc
}
void EditNewlyCreatedCustomer(IWebDriver driver)
{
Login(driver);
CreateNewCustomer(driver);
//do your selenium stuff..
}
and then your test methods:
[Test]
void Login_DoesWhatIExpect()
{
var driver = new InternetExplorerDriver("your Login URL here");
Login(driver);
Assert(Something);
}
[Test]
void CreateNewCustomer_WorksProperly()
{
var driver = new InternetExplorerDriver("your Login URL here");
CreateNewCustomer(driver);
Assert(Something);
}
[Test]
void EditNewlyCreatedCustomer_DoesntExplodeTheServer()
{
var driver = new InternetExplorerDriver("your Login URL here");
EditNewlyCreatedCustomer(driver);
Assert(Something);
}
このように、特定のテストの順序は重要ではありません。確かに、Login
テストが失敗した場合、CreateNewCustomer
andEditNewlyCreatedCustomer
テストも失敗しますが、操作の「スレッド」全体をテストしているため、この場合は実際には関係ありません