selenium, WebDriverを利用してWEBサイトへアクセス・画面操作・画面キャプチャ/画面ソース保存等を自動で行うようなコードをJavaで書いています。その際JUnitを利用しており、現状、プロジェクトディレクトリでsrc/main/java
を使用せず、src/test/java
( src/test/resources/
)のみで書いています。
src/test/java
配下のパッケージは大まかには
- common
├ セットアップ用クラス(chromeDriverのセット、seleniumServerの立ち上げ・ストップ)
└ ドライバのコンテキストクラス、汎用的なメソッド類(キャプチャ保存等) - senario
└ 画面操作のパターンクラス - invoke
└ 上記senarioを実行するクラス
のように構成しています。
動かすのに問題はないのですが、src/main/java
を使用しないプロジェクトはおかしいということはないでしょうか。もっとこういうやり方にしたほうがよい等のご助言を賜りたく、ご意見いただけませんでしょうか。
[追記] なぜJUnitを使っているか:
senarioのいくつかを一度に(順繰りに)行う等するため、リスト(chromeとFireFoxのドライバ。IEのドライバはうまく動作しなかったため、除外しました)にしているコンテキストをforEachで実行させるようにしています。大まかに以下のようなコードです。
public class Invoker {
static private List<Context> contexts = new ArrayList<>();
@BeforeClass
public static void setup() throws Exception {
セットアップ用のクラスからセットアップのメソッド実行
contextsにChromeとFireFoxのドライバをadd
}
@AfterClass
public static void quit() throws Exception {
ドライバのquit
}
@Test
public void case1() {
contexts.forEach(it -> {
new シナリオのクラス().シナリオのメソッド(it);
});
contexts.forEach(it -> {
new シナリオのクラス().シナリオのメソッド(it);
});
}
@Ignore("unexecuted")
@Test
public void case1() {
contexts.forEach(it -> {
new シナリオのクラス().シナリオのメソッド(it);
});
contexts.forEach(it -> {
new シナリオのクラス().シナリオのメソッド(it);
});
}
}
きれいではないと思うのですが、実行したくないテストケースについて@Ignoreで明示的に行わないようにしています。JUnitの本来の使い方としては、src/main/java
内のモジュールを切り出してテストするような用途だとは思っているのですが、書いているうちに混乱してきてしまっていて、ご助言を賜りたい次第です。情報不足でしたら、ご指摘ください。
[再追記]
argiusさんよりご回答いただいて1ヶ月超過しているので、根治/再実装はしておりませんが該当プロジェクトの修正の方向性をまとめます。
- テスト内に書いているシナリオや起動クラスはメインに移動する。
- @Ignoreで無視している部分は、起動時のオプションなどで走らせるシナリオのメソッドを変える等で解決する
現在はjarに固めずIDEから直接テストを起動するやり方で運用しておりとても楽ですが、構成を見直し適したものにしたいと思います。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
追記ありがとうございます。
src/main/java
のようなMavenスタイルのディレクトリー構成は、Maven,Gradle,sbtなどのビルドツールのためのものなので、その恩恵を受けられるようにするにはそれなりの構成にするのが望ましいです。
src/test/java
の下にあるコードは、テスト用のコードなので、今この
WEBサイトへアクセス・画面操作・画面キャプチャ/画面ソース保存等を自動で行う
という機能がプロダクトとして実装されたものであれば、これをパッケージングを行う機能を使ってパッケージを作ったり、それをデプロイすることができなくなります。
つまりJarファイルにしてそれを動かすというのは基本的にはできないものとなります。
JUnitライブラリーの依存関係をtest限定にしなければ、それを回避できますが、あまり一般的なやりかたではないですね。
あくまでJUnitはテストのためのライブラリーなので、それ以外の用途は想定していないからです。
任意のメソッドを実行したいのでしたら、JUnitでやっているようなことを自前でリフレクションなどを用いて実装するほうが良いでしょうね。
常にソース付きで使い、ビルドツールのtest
コマンドで実行する前提なら、これでもかまわないとは思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
argius
2016/04/20 20:17
もしよろしければ、JUnitを何のために使っているのか、すこしご説明頂けますか?