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で実行させるようにしています。大まかに以下のようなコードです。
java
1public class Invoker { 2 static private List<Context> contexts = new ArrayList<>(); 3 4 @BeforeClass 5 public static void setup() throws Exception { 6 セットアップ用のクラスからセットアップのメソッド実行 7 contextsにChromeとFireFoxのドライバをadd 8 } 9 10 @AfterClass 11 public static void quit() throws Exception { 12 ドライバのquit 13 } 14 15 @Test 16 public void case1() { 17 contexts.forEach(it -> { 18 new シナリオのクラス().シナリオのメソッド(it); 19 }); 20 contexts.forEach(it -> { 21 new シナリオのクラス().シナリオのメソッド(it); 22 }); 23 } 24 25 @Ignore("unexecuted") 26 @Test 27 public void case1() { 28 contexts.forEach(it -> { 29 new シナリオのクラス().シナリオのメソッド(it); 30 }); 31 contexts.forEach(it -> { 32 new シナリオのクラス().シナリオのメソッド(it); 33 }); 34 } 35} 36
きれいではないと思うのですが、実行したくないテストケースについて@Ignoreで明示的に行わないようにしています。JUnitの本来の使い方としては、src/main/java
内のモジュールを切り出してテストするような用途だとは思っているのですが、書いているうちに混乱してきてしまっていて、ご助言を賜りたい次第です。情報不足でしたら、ご指摘ください。
[再追記]
argiusさんよりご回答いただいて1ヶ月超過しているので、根治/再実装はしておりませんが該当プロジェクトの修正の方向性をまとめます。
0. テスト内に書いているシナリオや起動クラスはメインに移動する。
0. @Ignoreで無視している部分は、起動時のオプションなどで走らせるシナリオのメソッドを変える等で解決する
現在はjarに固めずIDEから直接テストを起動するやり方で運用しておりとても楽ですが、構成を見直し適したものにしたいと思います。
回答1件
あなたの回答
tips
プレビュー