テストコードの作成

Download Report

Transcript テストコードの作成

2014年7月26日
@オープンソース・ワークショップ
1.
2.
3.
4.
5.
はじめに [5min]
お知らせ [5min]
特別編 [50min]
オープンプロジェクト [60min]
モクモク会 [60min]
2
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1.
2.
3.
4.
5.
はじめに
お知らせ
特別編
オープンプロジェクト
モクモク会
3
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
目的
ADempiereに関する知識を共有し、全般的な理解を深める。
想定参加者
ADempiereの利用に興味を持っている人
(当面はユーザ視点に立ち、ADempiereの標準機能を説明の中心とする。)
参加者の前提知識
特になし
勉強会の構成
・業務編
・システム編
・特別編
参考資料
●Bayu Chauya Pamungkas, “ADempiere 3.4 ERP Solutions “, PACKT
●湯浅和雄, 「この1冊ですべてわかる 物流とロジスティクスの基本」, 日本実業出版社
4
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
本勉強会では、ADempiereの導入支援として、基礎となる体系的な情報整理とその共有を目指し
ます。コミュニティ参加者には本勉強会の知識をベースとして、より高次の理解に取り組んで頂き、
知り得た内容を、コミュニティに共有頂く、といった”お互いに教えあう場”となればと考えています。
理解度
実利用に求められる
知識に対して、体系的
な整理が行われてい
ない
領域
理解度
以前の課題
勉強会の目標
5
連続勉強会により、
体系的な情報整理
⇒勉強会の知識を基礎と
して、より高次の知見へ展
開
領域
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
勉強会参加者の興味対象は、人によって異なるため、必ずしも参加者全員の知的欲求を満たせると
は限りません。
当活動はボランティアベースであるため、Bさん、Cさんの興味対象であるがAさんの興味対象外の事
柄については、Aさんに期待するのではなく、各自で取り組んでみましょう。
Cさんの興味
Aさんの興味
Bさんの興味
6
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
ADempiereの概要
中小企業向けERPとして開発されたCompiereから2006年に分岐して、開発されている
ソフトウェアおよび、その開発コミュニティ。
Eric Raymondの著作、『伽藍とバザール』のバザール方式により開発がすすめられて
いるプロジェクト。
ADempiereのシステム機能
–
–
–
–
–
–
Enterprise Resource Planning (ERP)
Supply Chain Management (SCM)
Customer Relationship Management (CRM)
Financial Performance Analysis
Integrated Point of sale (POS) solution
Integrated Web Store
7
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
8
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
注文
生産
発注
出荷
在庫
入荷
商品
売上
販売管理
請求書
生産・在庫管理
商品
商品
仕入
取引先
購買管理
財務
会計
債権
管理
代金
注文
受注
商品
顧客
発注指示
受注情報
請求書
財務会計
債務
管理
入金
人事
給与
支払
債権管理
人事管理
債務管理
9
代金
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1.
2.
3.
4.
5.
はじめに
お知らせ
特別編
オープンプロジェクト
モクモク会
10
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
• 特になし
• 翻訳確認
– https://sourceforge.jp/ticket/browse.php?group_id=2599&tid=34053
11
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
• iDempiere Wiki更新
– New Feature for v3.0
• https://sourceforge.jp/ticket/browse.php?group_id=2599&tid=34053
– コンパイル環境構築
• http://wiki.idempiere.org/wen/index.php?title=Installation_in_Eclipse&oldid=5675
• ADempiere Wiki
– Getting Started
• http://www.adempiere.com/JP/Table_of_Contents#Getting_Started
12
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
• iDempiere Wikiのatom feed
• Prior Period Adjustment
• 8/5にOpen Source Initiative
13
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1. はじめに
2. お知らせ
3. 特別編
1.
2.
3.
コードリーディング/初期クライアント作成
JUnit入門
Lightening Talk
4. オープンプロジェクト
5. 今後の活動
14
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
<背景>
• 初期クライアント作成を行ったところ、以前は、自動生成され
るカレンダーの名称が、「XXX Calendar」であったのに対し、
今回は、「XXX カレンダー」と日本になっている。
• 初期クライアント作成は何をやっているのか気になった。
<事前準備>
• ソースは以下手順でeclipseに取り込むことが可能です。
– http://www.adempiere.com/JP/Setup_Development_Environment
15
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
ソースファイルは以下フォルダ構成に格納。パッケージフォルダ上のソースがコンパイル対象 (?)
Base/srcに処理ロジックが実装された主要コードが格納。
<パッケージフォルダ>
• base/src
–
–
–
•
•
•
org.adempiere
org.compiere
org.eevolution
glassfishfacet/src
jbossfacet/src
…
<通常フォルダ>
• adempiere
• base
• client
• data
• doc
• …
16
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
バッチ処理のソースは、org.adempiere.process配下に格納。
• base/src
– org.adempiere.process
• InitialClientSetup.java
• バッチプロセスは、一律SrvProcessを継承
• 画面の入力パラメータがメンバー変数として管理され、prepareメソ
ッドでメンバー変数を取得し、doItでバッチ実行
⇒カレンダーを含むシードデータ作成は、doItに実装されている。
17
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
InitialClientSetup.javaのdoItは以下流れでの実装となってます。
1. 必須項目チェック
2. クライアントおよびユーザーの重複チェック
3. City_ID(都市)が入力されている場合はCity_Name(都市名)
を上書き
4. COAの読み取りチェック
5. セットアップ処理 (Msetup.createClient) <- クライアントの作
成
6. 会計設定 (Msetup.createAccounting) <- 会計設定
7. 出力結果画面表示
18
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
カレンダーデータの作成は、Msetup.createAccountingで実装。createAccountingは以下が実装されて
いる。
1.
2.
3.
4.
5.
6.
7.
8.
カレンダーの作成 (Mcalendar)
勘定科目エレメントの作成
勘定科目の作成
会計スキーマの作成
会計スキーマエレメントの作成
デフォルト勘定科目の作成
GLカテゴリーの作成
Baseドキュメントタイプの作成
19
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
Mcalendarは以下となってます。
public MCalendar (MClient client)
{
super(client.getCtx(), 0, client.get_TrxName());
setClientOrg(client);
setName(client.getName() + " " +
Msg.translate(client.getCtx(), "C_Calendar_ID"));
} // MCalendar
20
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
Translateメソッドの実装はいかとなってます。
public static String translate(Properties ctx, String text)
{
if (text == null || text.length() == 0)
return text;
String s = (String)ctx.getProperty(text);
if (s != null && s.length() > 0)
return s;
return translate (Env.getAD_Language(ctx),
Env.isSOTrx(ctx), text);
} // translate
21
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
getAD_Languageの実装はいかとなってます。
public static String getAD_Language (Properties ctx)
{
if (ctx != null)
{
String lang = getContext(ctx, LANGUAGE);
if (!Util.isEmpty(lang))
return lang;
}
return Language.getBaseAD_Language();
} // getAD_Language
22
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
getAD_Language は、ctxに依存するが、ctx自体は、Msetupのインスタンスの際に、以下のように取得
• MSetup ms = new MSetup(Env.getCtx(),
WINDOW_THIS_PROCESS);
23
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
• 初期クライアント設定の際には、英語の画面で実行した方が
よい?
• モデルはcompiereからあまりかわっていない
• プロセスのロジックを見る場合には、
org.compiere/adempiere.processをあたると、そこから先は、
modelに格納されており、util上のクラスが呼び出される、と
いう階層関係にある。
• context上で、セッション情報が格納されており、どのようにセ
ットアップされるのかは、継続調査が必要。
24
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1. はじめに
2. お知らせ
3. 特別編
1.
2.
3.
コードリーディング/初期クライアント作成
JUnit入門
Lightening Talk
4. オープンプロジェクト
5. 今後の活動
25
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1.
2.
3.
4.
JUnitとは
インストール
テストコードの作成
テストコードの実行
26
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
<概要>
• Javaで開発された単体テストの自動化フレームワーク
• Common Public License
<推奨される理由>
• 一度作成すれば素早くテスト可能
• テストコードで仕様がわかる
• 誰でも同じテストを行える
<Junitの問題点>
• 仕様変更ごとにテストコードを作り直さなければならない
–
•
テスト駆動開発では、仕様がテストコードにて伝えられるため、解消される (?)
テストコードの作成に時間がかかる
–
ツールによりテストコードを自動生成できる (機能テストという位置づけで見なせば、十分?)
27
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
以下をインストールする必要がある。
<コンソールでテストする場合>
• JUnitのjarファイル
<Eclipseでテストする場合>
• Eclipseおよび、JUnit plugin (Eclipse Helios以降は標準搭載)
• Quick JUnit (テスティングペアがないクラスを通知し、テストク
ラスを自動生成)
• CodePro (テストコードを自動生成)
• EclEmma (コードカバレッジをビジュアル表示)
28
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
以下のルールにのっとり作成する必要がある。
• テストクラスはpublicクラスとする
• テストメソッドは、org.junit.Testアノテーションを付与したpublic
メソッドとする
• テストメソッドは、戻り値がvoidであり、引数を持たない
• Throuws句は自由に定義可能
29
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
以下流れでテストコードを作成する
1.
2.
3.
4.
テスト対象コードを生成
Srcと並列にtestコードのソースフォルダを作成
Junit Test Caseを作成
テストコードを実装
30
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
31
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
package junit.tutorial;
public class Calculator {
public int multiply(int x, int y){
return x*y;
}
public float divide(int x, int y){
if(y==0)throw new IllegalArgumentException("divide by zero");
return (float) x /(float) y;
}
}
}
32
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
package junit.tutorial.temp;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.*;
import org.junit.Test;
public class CalculatorTest {
@Test
public void multipyで3と4の乗算結果が取得できる() {
Calculator calc=new Calculator();
int expected = 12;
int actual=calc.multiply(3, 4);
assertThat(actual, is(expected));
}
@Test
public void multipyで5と7の乗算結果が取得できる() {
Calculator calc=new Calculator();
int expected = 35;
int actual=calc.multiply(5, 7);
assertThat(actual, is(expected));
}
@Test (expected=IllegalArgumentException.class)
public void divideで5と0のときIllegalArgumentExceptionを送出する() {
Calculator calc=new Calculator();
calc.divide(5, 0);
}
}
33
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
CodeProから、テストコードを自動生成することも可能です。
1. CodeProから、ソースを自動生成 (ソースを選択の状態で、
右クリック->Code Pro Tools -> Generate Test Caseを選択)
1.
テストコードが自動生成
34
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1. Run As -> Junit Testを実行
1.
実行結果のOK/NG件数が表示
2. EclEmmaを実行
1.
2.
ソースファイルを見ると、通過パスが緑、未通過パスが赤で表示
ソースおよびテストケースの実行カバレッジが表示
35
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1. はじめに
2. お知らせ
3. 特別編
1.
2.
3.
コードリーディング/初期クライアント作成
JUnit入門
Lightening Talk
4. オープンプロジェクト
5. 今後の活動
36
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1.
2.
3.
4.
5.
6.
はじめに
お知らせ
特別編
オープンプロジェクト
今後の活動
モクモク会
37
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
勘定科目データの準備
初期クライアントセットアップ
組織のセットアップ
会計スキーマのセットアップ
会計カレンダのセットアップ
取引先のセットアップ
銀行のセットアップ
現金出納帳のセットアップ
手数料のセットアップ
通貨のセットアップ
プライスリストのセットアップ
製品のセットアップ
製品価格の自動設定
38
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1. 購買管理
1.
2.
3.
4.
5.
補充レポート (購買依頼)
発注
入荷
請求書
支払
2. 生産管理
3. 販売管理
1.
2.
3.
4.
5.
見積もり
受注
出荷
請求書
入金
4. 会計管理
39
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
1.
2.
3.
4.
5.
はじめに
お知らせ
特別編
オープンプロジェクト
モクモク会
40
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.
著作権
本書の記載内容は、著作権の対象となっています。
本書の内容の全部または一部について、私的使用または引用等著作権法上認められた行為として、適
宜の方法により出所を明示することにより、引用・転載複製を行うことができます。
免責事項
本書に記載されている情報の正確さについては万全を期しておりますが、利用者が本書の情報を用い
て行う一切の行為について、何ら責任を負うものではありません。
その他
本書は、予告なしに内容を変更またはSourceForge.jpからの公開の取りやめを行う場合がありますが、あ
らかじめご了承ください。
本書の記載内容に関するお問い合わせ先
Open Source ERP Users Group
http://www.oss-erp.jp/
41
Copyright © 2013 Open Source ERP Users Group
All Rights Reserved.