質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

5574閲覧

java プロジェクトディレクトリの構成について

poyopi

総合スコア113

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

1グッド

0クリップ

投稿2016/04/20 11:10

編集2016/05/23 06:06

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にChromeFireFoxのドライバを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から直接テストを起動するやり方で運用しておりとても楽ですが、構成を見直し適したものにしたいと思います。

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/04/20 11:17

もしよろしければ、JUnitを何のために使っているのか、すこしご説明頂けますか?
guest

回答1

0

ベストアンサー

追記ありがとうございます。

src/main/javaのようなMavenスタイルのディレクトリー構成は、Maven,Gradle,sbtなどのビルドツールのためのものなので、その恩恵を受けられるようにするにはそれなりの構成にするのが望ましいです。

src/test/javaの下にあるコードは、テスト用のコードなので、今この

WEBサイトへアクセス・画面操作・画面キャプチャ/画面ソース保存等を自動で行う

という機能がプロダクトとして実装されたものであれば、これをパッケージングを行う機能を使ってパッケージを作ったり、それをデプロイすることができなくなります。
つまりJarファイルにしてそれを動かすというのは基本的にはできないものとなります。

JUnitライブラリーの依存関係をtest限定にしなければ、それを回避できますが、あまり一般的なやりかたではないですね。
あくまでJUnitはテストのためのライブラリーなので、それ以外の用途は想定していないからです。

任意のメソッドを実行したいのでしたら、JUnitでやっているようなことを自前でリフレクションなどを用いて実装するほうが良いでしょうね。

常にソース付きで使い、ビルドツールのtestコマンドで実行する前提なら、これでもかまわないとは思います。

投稿2016/04/21 06:39

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poyopi

2016/04/21 09:27 編集

ご助言ありがとうございます。このプログラムは動作確認に利用する予定のものなのですが、この動作確認のためのseleniumのプログラムの動作確認(変な日本語ですね)は、IDEからJUnitのRun JUnit Testを行うことで実現しておりました。ですが、seleniumが自動化のためのものであることを鑑みると、現状のやり方はおかしいですね。少し構成を見直してみて、納得のいく実装ができたら、質問にその内容を追記して、解決済みにするように致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問