パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください -32ページ目

パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください

開発の解決方法や新しい手法の情報を、パークのエンジニアが提供します。パークのエンジニアが必要な場合は、ぜひお気軽にお問い合わせ下さい。 株式会社パーク:http://www.pa-rk.co.jp/

今回は、NUnitでの例外処理のテストコードについて説明します。

NUnitについては、前に説明したので、そちらを参照してください。

NUnitでは、簡単に例外処理のテストを行える。
今回は、簡単な例外のテストコードを作成した。

下記は、テスト対象のコード

using System;

namespace Sample.Test
{
///
/// テスト対象クラス
///

class Sample
{
public void CallException()
{
throw new SampleException("例外", 1000);
}
}

///
/// 自作の例外クラス
///

class SampleException : Exception
{
public int ErrCode { get; set; }

public SampleException(string massage, int code)
: base(massage)
{
this.ErrCode = code;
}
}
}


下記は、テストのプログラム
using System;
using NUnit.Freamwork;


namespace Sample.Test
{
///
/// テスト
///

[TestFixture]
public class TestCode
{

///
/// Assert.Throwを使用して例外テスト
/// NUnit2.5から追加された機能
/// 2.5以前とは違い、属性を付加しないでよい。
///

[Test]
public void Test()
{
ver ex = Assert.Throw( ()=>
{
Sample sample = new Sample();
sample.CallException();
});

Assert.AreEqual("例外", ex.Message);
Assert.AreEqual(1000, ex.ErrCode);
}

///
/// 従来の例外テスト
/// Messageの比較はできるが、複雑なことができない。
/// ErrCodeの比較が出来ないかも?(ErrCodeを比較するとTest_2)
///

[Test]
[ExpectedException(typeof(SampleException), ExpectedMessage="例外")]
public void Test_1()
{
Sample sample = new Sample();
sample.CallException();
}

///
/// 従来の例外テスト
///

[Test]
public void Test_2()
{
string message="";
int code=0;
try
{
Sample sample = new Sample();
sample.CallException();
}
catch(SampleException ex)
{
message = ex.Message;
code = ex.ErrCode;
}
Assert.AreEqual("例外", message );
Assert.AreEqual(1000, code );

}
}
}

従来の例外テストより簡単に例外のテストコードを作成出来るようになっているので
Assert.Throwを使用してテスト行ってみてほしい。

では、稲刈りで忙しいので、さようなら。
@some
こんにちは、中村です。

前回の記事では、今回は関数プログラミングの話をする予定だったのですが、ちかの記事に言いたいことが大体言われちゃってたので、他のことを話そうと思います。
ちょうどこの前遊びに行ったLLまつりで聞いたPowerShellの話がおもしろかったので、その話を。

講演者の方がスライドを公開されているので、内容についてはそちらを参照ください。
https://speakerdeck.com/tyanagida/powershell-for-ll-users
正直、この話を聞く前まではPowerShellに興味はなかったんですが、LL(LightweightLanguage)好きにおすすめということでちょっと話を聞いてみました。

聞いてみると予想していたよりもおもしろくて、「PowerShellってこんなこともできたのか!」っていう驚きがたくさんありました。

詳しい内容はスライドに譲りますが、lsやsortなどのコマンドで返ってくるのが.NETのオブジェクトっていうことを聞いて、一気に興味を惹かれました。

その後、COMオブジェクトの操作ができたり、C#をインライン(実際にはC#に似た構文)で書けたりするってことを聞いて、「あれ?PowerShellってなんでもできるんじゃないか?」って思って、今まではまったく食指の動かなかったPowerShellですが、発表を聞いたことを機にちょっと勉強してみようかという気になってきました。

まずはスライド中で紹介されていた使う気が無い人向けのPowerShell入門を読んでみようかなと。
いや、実際には使う気はあるんですよ?
でもやっぱりタイトルがおもしろすぎたので釣られちゃいました。

尚、スライド中で紹介されているスクリプトをISE上で保存してしまうと実行時にUnauthorizedAccessが出るようになります。
その場合、以下のコマンドでスクリプトの実行ポリシーを変更するとスクリプトを実行できるようになります。
実行ポリシーの一覧と詳細についてはこちらへ。
PS > Set-ExecutionPolicy RemoteSigned
* 実行ポリシーの変更はOS全体に影響するので注意が必要です。
今日はLombokについて紹介したいと思います。

最近ブログでちょくちょくJava使いの間で「Lombok」という言葉を耳にするのですが、ご存知でしょうか?

LombokはJavaBeanなどでよく見られるsetter/getterなどの冗長なコードをアノテーションによって書かなくて済むようにしてくれる便利なライブラリなんです。


例えば良くある下記の使い方。

package sample.lili;

public class SampleData {

private String data;
}

このdataのアクセサーを作るには、Eclipseなら

$ソフトウエア開発(android・iphone・windows・java等)の事なら株式会社パークにお任せください_パク太郎のソフトウエア開発者ブログ-lombok01


上記のように「フィールドのカプセル化」なんてやってアクセサーを作ると思います。

そうすると下記のようなおなじみのコードが出来上がるわけです。

package sample.lili;

public class SampleData {

private String data;

public void setData(String data) {
this.data = data;
}

public String getData() {
return data;
}
}

お決まりと言えば、お決まりですが、ちょっと冗長ですよね。。
しかし、Lombokを使えばもっと簡潔に書けちゃいます。

■Lombokを使うには?
簡単です。
①http://projectlombok.org/ へアクセスしましょう
②するとトップに「Download!」とあるのでダウンロードしてきてください。(バージョンは8/30時点では「0.12.0」です)

ソフトウエア開発(android・iphone・windows・java等)の事なら株式会社パークにお任せください_パク太郎のソフトウエア開発者ブログ-lombok02

③実行可能jarとしてダウンロードされるので、ダブルクリックで実行してください。
④通常は、インストールされているIDEが表示されるのですが、私の場合All in One の Eclipseを入れていたせいか、見つからなかったようです。

ソフトウエア開発(android・iphone・windows・java等)の事なら株式会社パークにお任せください_パク太郎のソフトウエア開発者ブログ-lombok03

指定してあげて…

ソフトウエア開発(android・iphone・windows・java等)の事なら株式会社パークにお任せください_パク太郎のソフトウエア開発者ブログ-lombok04

無事インストールできました。

⑤そして、プロジェクトのビルドパスに「lombok.jar」を指定してください。

ソフトウエア開発(android・iphone・windows・java等)の事なら株式会社パークにお任せください_パク太郎のソフトウエア開発者ブログ-lombok05


■使い方
先ほどのクラスに「@Data」のアノテーションをつけるだけ。


package sample.lili;

import lombok.Data;

@Data
public class SampleData {

private String param;
}

すると、アウトラインにgetter/setter,hashCode(),toString()といったメソッドが自動生成されました。

ソフトウエア開発(android・iphone・windows・java等)の事なら株式会社パークにお任せください_パク太郎のソフトウエア開発者ブログ-lombok06


ここで、使用したのは「@Data」アノテーションですが用途によって絞ることも可能です。

getterのみを作成したい:@Getter
setterのみを作成したい:@Setter
equals(),canEqual(),hashCode()のみ:@EqualsAndHashCode
値取得関連(getter,equals(),toString()など):@Value

実態はコンパイル時にメソッドが生成されるようですが、「スコープがpublicになってしまう」のが少しだけ気になりましたが、アクセサーとしての余計なコードを書く手間が省けるというのは良さそうです。

ただし、Eclipse以外の環境では不安定な動作をすることもあるらしいので、今後に期待といったところでしょうか。
(Play FrameworkやIntelliJ向けも一応あるようです)
こんにちは。バグ太郎です。

気合を入れてアップしてる方が多いですが、私は力を抜いて環境について触れたいと思います。
環境と言ってもコーディングに直接かかわる部分ではありませんので悪しからず。

今回は、愛用フリーウェアの"fenrir"について紹介したいと思います。


fenrirとはシンプルイズベストを体現するかのような風貌に反し便利な機能を持ち合わせているソフトウェアです。
いうなればファイランチャー。ファイラー+ランチャーです。
風貌に関してですが、初期画面ではキーワードを入力するスペースしかありません。実画面はご自分でお確かめ下さい。

私が使用する場合はファイラーが既にあるので、ランチャーとしての使用になります。


fenrirはインストーラが存在しませんので、解凍後そのままfenrir.exeを起動して下さい。
初回起動の際はドライブのスキャンの有無を聞いてきます。

なぜドライブをスキャンするのかと言うと・・・
fenrirは基本機能として、入力したキーワードを含むディレクトリパスをインデックスから探索し、該当するディレクトリをファイラーとして羅列するからです。
一度目的を達成するに至ったキーワードはきっちりインプットして次回から先頭に表示します。
このインデックスを作成するのがスキャンになります。
スキャンの詳細も自分で設定することが出来ますが、今回は省略致します。


さて、超高速で超高機能で超新星なfenrir様様ですが、これだけではインデックスからサーチ出来るファイラーで終わってしまいます。作業効率化を図る為にそこだけでは終わらせません。

なにを隠そうこのfenrirさんは、キーワード入力部分を使ってコマンド実行が出来ます。
キーワードを入力する際に!を先頭につけることでWindowsのコマンドが使用できます。
たとえば"!cmd"と打ち込むとコマンドプロンプトが立ち上がります。
同様に"!calc"で電卓が立ち上がります。

fenrirを常駐させた場合ホットキーが有効になりますので、CapsLockに設定した場合
Windows XP機でも
CapsLock押下→"!cmd"と5キーの入力だけでコマンドプロンプトが立ち上がります。

そしてこのコマンド実行は拡張まで出来てしまいます。
まずdataフォルダ内の"instant.ini"をリネームして"instant.ini"にします。
設定はこの"instant.ini"を編集します。
"instant.ini"内で設定する分には!を付加する必要がありません。

;[書式]
;文字列=コマンドライン

と書いてありますね。
文字列が入力するキーワードになります。
コマンドライン部分に実行したいコマンドを設定するわけです。以下が例です。

hoge="C:\Program Files\hoge\hoge.exe"

するとキーワードとしてhogeを打ち込むことでhoge.exeが実行されます。
ただし上のような記述だと、"hoge"と打ち込み終わった瞬間に実行されてしまいます。
エンターを押す動作が欲しい私としては頂けません。
というより、"hoge"から始まる文字列を含むディレクトリパスを探索できないという弊害があります。

そこで

hoge="C:\Program Files\hoge\hoge.exe" %A

というように%Aをつけてあげます。これはキーワード後に入れた引数をパラメータとして渡すというマクロですので、%Aがあると入力待ちになります。
半角スペースを入れることでパラメータの扱いになりますので、設定次第で色々な動作をさせることができます。

たとえば

shutdown=shutdown %A

と設定することで
キーワードで"-r"を付加するか"-s"を付加するかで再起動とシャットダウンを使い分けることが出来ます。
はたまた、

reboot=shutdown -r -f -t 10 %A
shutdown=shutdown -s -f -t 10 %A

と設定することで
少しパラメータが多めの再起動とシャットダウンをキーワードの違いで使い分けることも出来ます。

セキュリティ的にどうなのとは思いますが、netコマンドを設定しておくことで、ネットワークへの接続も自動で行ってくれるわけですね。

業務でもっと使えそうな物はないのか!という意見もあるでしょうから記憶にあるものをご紹介致します。

評価においてプログラムの追加と削除を頻繁に使う場合はございませんか?

起動したものをいちいち残しておくとタスクバーが見るも無残な姿になりますので、私はなるべくウィンドウを閉じるようにしています。
そこで活躍したのがこれです。

cpro=appwiz.cpl %A

cproと打ち込むだけでプログラムの追加と削除を開きます。
といってもコレ自体もコマンドプロンプトで使えるコマンドなので今までのものと大差ないですが・・・

コントロールパネルに至っては設定するまでもなく"!control"で開きます。

次にブラウザとの連携。
検索するワードは決まっていて、その検索一回の為に立ち上げにマウスポチポチするのも億劫・・・
って方はこれ

-g=""C:\Program Files\hoge\hoge.exe" "http://www.google.co.jp/search?ie=UTF-8&oe=SJIS&hl=ja&lr=lang_ja&q=%A""

ディレクトリは各自好きなブラウザを当ててください。
上記のような設定だと、

"-g ビッグデータ"

とfenrirにて打ち込むと
ブラウザを立ち上げて検索結果を表示してくれます(Firefoxの場合)

さて、ここまで簡単に説明させていただきましたが、
WSHやらRubyやら活用することでツイッターで投稿等、大抵の作業がfenrirに始まりfenrirで終わらせることが出来るようです。

【利点】
・レジストリを弄らず、設定はiniのみ。
・動作がとても軽いので重宝する
・これと高機能なファイラーをあわせることでデスクトップを汚すことがなくなる。

同じく愛用のフリーウェアであるX-finderを用いてる方はfenrirのcmdフォルダ内にある"0enter.txt"に

[.\\\;
XF|"C:\Program Files\X-Finder\XF.exe" NewTab:"%P"
]

と記述してみて下さい。
fenrirにて目的のディレクトリを探し、enterを押すとX-finderにて表示が可能です。

マウスをポチポチするのが嫌なキーボーダーは是非使ってみてください。
こんにちは。
パク太郎です。

今回は、EWS Java APIについて書きたいと思います。
EWS Java APIとは、Exchange Serverの機能を使うためのJava用のAPIの事です。

ちょっと使う機会があったので、備忘録的に書き起こします。

1.準備編
まずは、Exchange Serverにアクセスするための準備をします。
コードは下記のようになります。

ExchangeCredentials credentials = new WebCredentials(userId, password);
ExchangeVersion exchangeVersion = ExchangeVersion.Exchange2010_SP2;
ExchangeService exchangeService = new ExchangeService(exchangeVersion);

exchangeService.setUrl(new URI(https://xxxx/EWS/Exchange.asmx));
exchangeService.setCredentials(credentials);
Exhange Serverにアクセスするために、ExchangeServiceクラスのインスタンスを作成しています。
ハイライトされている箇所は適宜変更する必要があります。


2.アクセス編
次に作成したインスタンスを用いて実際にアクセスする方法を見ていきます。

2.1 取得
メールを取得してみます。
コードは下記のようになります。
FindItemsResults<item> findItemsResults = exchangeService.findItems(WellKnownFolderName.Inbox, new ItemView(Integer.MAX_VALUE));
ArrayList<Item> items = findItemsResults.getItems();
メールを取得したいので、Inboxフォルダ内のItemを取得しました。
今回は説明しませんが、SearchFilterを用いて検索条件を指定することも出来ます。

2.2 内容の確認
取得したメールの内容を確認します。
コードは下記のようになります。
for(item : items){
    item.load();
    if(item instanceof EmailMessage){
        EmailMessage emailMessage = (EmailMessage)item;
        System.out.println("送信日時 : " + emailMessage.getSender().getAddress());
        System.out.println("送信者アドレス : " + emailMessage.getSender().getAddress()); 
        System.out.println("タイトル : " + emailMessage.getSubject());
    }
}
今回はメールを取得したので、EmailMessageクラスにキャストして内容の確認を行います。
送信日時・送信者アドレス・タイトルを表示しました。

今回はここまでにします。
ちなみにフォルダを変えることでメール以外にも色々情報が取れます。
詳しくはこちら


では~ノシ