0

私は、ColdFusion のバックグラウンドから来て、JAVA の世界にかなり慣れていませんが、Selenium WebDriver /JUnit を学んでいるため、Java を学んでいます。同様の構造に従う管理機能をテストするいくつかのテスト クラスを作成しました。

public class myclass{

public static WebDriver driver;

@BeforeClass
public static void startDriver(){
   driver = new FirefoxDriver();
   driver.get("some url");
}

@Test
public void myLogin(){

    some login code

}

@Test
public void somefunction() {

    other admin function to test

}

私の質問は次のとおりです。すべてのテストでユーザーがログインする必要があるため、「mylogin」テストコードを何度も再利用する必要があります。ログイン ページの機能に変更が加えられた場合に、1 か所だけ変更するだけで済むように、ログイン コードを単に「含める」(ColdFusion の「cfinclude」タグのように) テストを作成するにはどうすればよいでしょうか。

4

3 に答える 3

3

Java には、ColdFusion や C のようなレキシカル インクルード ステートメントがありません。これは設計によるものです。コンパイル前にソースコードを貼り付けるだけでは、モジュール間でコードを共有する方法が非常に不潔だからです。

しかし、この問題にアプローチする方法は他にもたくさんあります。ここに2つあります:

  1. メソッドにカプセル化された一般的に使用される機能を使用して独自のライブラリを作成し、このライブラリをテストで使用します
  2. テスト クラスのsetUpおよびtearDownメソッドを追加します。これらのメソッドは、各テスト メソッドの前後に実行されます。テスト クラスは相互に継承できることに注意してください。したがって、同一setUpの およびtearDownメソッドを持つテスト クラスが多数ある場合は、それらを共通の基本クラスに拡張し、これらのメソッドを基本クラスに一度実装することができます。
于 2013-02-14T16:04:16.763 に答える
1

さまざまなテストでこの機能にアクセスするには、すべてのテスト クラスで拡張する必要がある基本の親クラスに myLogin() 機能を実装できます。

public abstract class MyBaseTest {
    public void myLogin() {
        <some login code>
    }
}

public class MyClass extends MyBaseTest {
    @Test
    public void somefunction() {
        super.myLogin();
    }
}
于 2013-02-14T16:08:57.973 に答える
0

@Beforeアノテーションを使用してこれを実現できます。注釈付きメソッドは、すべての @Test 注釈付きメソッドの前に実行されます。同様に、必要に応じて、ユニット テストごとに@Afterを使用してログアウトすることもできます。

于 2013-02-14T16:04:32.577 に答える