djUnitではメソッドが呼び出された際、強制的に特定のExceptionを発生させる事も可能です。強制的にExceptionを発生させる場合には「addReturnValue」を使用します。
1点注意しておきたいのは「addReturnValue」を使用してExceptionを発生させた時はjunitで「@Test(expected = RuntimeException.class)」の様にアノテーションでは確認出来ないのでTry~catchで確認する必要があります。
Javaソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
/** * <p>[概 要] URLエンコード処理</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param str 文字列 * @param enc - 文字コード * @return URLエンコード後の文字列 */ public static String urlEncode(String str, String enc){ String urlEncode = ""; StringBuffer result = new StringBuffer(); try { urlEncode = URLEncoder.encode(str, enc); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e.toString()); } // 半角スペースは「%20」へ置換する for(char c : urlEncode.toCharArray()) { switch (c) { case '+' : result.append("%20"); break; default : result.append(c); break; } } return result.toString(); } |
djUnitサンプル
以下のテストソースでは「URLEncoder」クラスの「encode」メソッドが呼び出された際に「UnsupportedEncodingException」がスローされた事を確認しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
@Test public void testUrlEncode_exception() { // 準備 String str = "/&<>\"\' abc123"; String enc = "utf-8"; // 「URLEncoder.encode()」を実行した際、UnsupportedEncodingExceptionを発生させます。 addReturnValue(URLEncoder.class, "encode", new UnsupportedEncodingException("MESSAGE001")); try { // 実行 UtilSample1.urlEncode(str, enc); fail("この行は、実行されないはず"); } catch (Throwable t) { assertTrue(t instanceof RuntimeException); assertEquals("java.io.UnsupportedEncodingException: MESSAGE001", t.getMessage()); } } |
TeraTermが日本語表示されない場合の対処方法についてメモしておきます。
事象
TeraTermを起動すると以下の様にメニュー等の表示が英語になっている。
原因
対応方法
- TeraTermのインストールフォルダ内にある「TERATERM.INI」ファイルをエディタで開きます。
- 次に「TERATERM.INI」ファイル内で「UILanguageFile=」と記載されている箇所を探します。
日本語表示されていない場合は以下の様に「UILanguageFile=」の後に何も記載されていません。
|
; User interface language file that includes message strings. ; Tera Term uses built-in English message when the file or message is not found. UILanguageFile= |
- 「UILanguageFile=」の箇所を「UILanguageFile=lang\Japanese.lng」に変更してINIファイルを保存します。
|
; User interface language file that includes message strings. ; Tera Term uses built-in English message when the file or message is not found. UILanguageFile=lang\Japanese.lng |
- 後はTeraTermを起動すれば日本語化されます。
JUnitで使用可能なアノテーションの種類についてまとめておきます。
環境
JUnit 4.10で使用できるアノテーション
アノテーション | 用途 |
@Before | メソッド単位で事前実行する |
@BeforeClass | テストクラスで一回だけ事前実行 |
@After | メソッド単位で事後実行する |
@AfterClass | テストクラスで一回だけ事後実行 |
@Rule | テスト時における一時的なルールの作成 |
@ClassRule | 複数のテストを通じてのルール設定 |
@Test | テストメソッドの指定 |
@Ignore | 一時的にテスト対象外メソッドを指定 |
SQLでテーブルのレコード数を取得する方法をご紹介します。
サンプルテーブル
以下の商品テーブル「goods」を元に説明します。
商品テーブル「goods」 |
|
単純なレコード件数の取得
SQL
SQLは
「SELECT COUNT(*) FROM [テーブル名];」形式で記述します。
|
SELECT COUNT(*) FROM goods; |
実行結果
重複データを除いたレコード件数の取得
SQL
重複データを除いて取得する場合、SQLは
「SELECT COUNT(DISTINCT [列名]) FROM [テーブル名];」形式で記述します。
|
SELECT COUNT(DISTINCT type_code) FROM goods; |
実行結果
業務でSQLを使用する場合、必ず使用する事になると言って良いのがテーブルの結合処理です。WEB系システムの場合、そのほとんどはRDBMSを使用してますのでテーブルが一つだけなどという事はまずありえません。複数のテーブルからその時々に応じて必要なデータを取得し使用するのが常です。その際に重要になるポイントの一つが内部結合と外部結合です。
サンプルテーブル
以下の商品テーブル「goods」と属性コードテーブル「type_code」を元に説明します。
商品テーブル「goods」 | 属性コードテーブル「type_code」 |
| |
内部結合とは
- 2つのテーブルで一致したデータ行のみ取得します。
- SQLは「SELECT * FROM [テーブル名1] INNER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
- サンプルSQL
|
SELECT goods.type_code, goods.name, type_code.code_name FROM goods INNER JOIN type_code ON goods.type_code = type_code.code; |
サンプルSQLの実行結果
外部結合とは
- 2つのテーブルで一致しないデータも含めてどちらか一方のテーブルのデータを全て取得します。
- SQLは左外部結合の場合、「SELECT * FROM [テーブル名1] LEFT OUTER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
- SQLは右外部結合の場合、「SELECT * FROM [テーブル名1] RIGHT OUTER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
- サンプルSQL(左外部結合の場合)
|
SELECT goods.type_code, goods.name, type_code.code_name FROM goods LEFT OUTER JOIN type_code ON goods.type_code = type_code.code; |
サンプルSQLの実行結果
このサイトにも記事を書く際に画像を添付する事が多いのですが、「画像の形式ってjpgとpngどっちがいいんだろう・・・」と思いながらも適当に使っていたのでその辺を整理しておこうと思います。他にはgifなどもありますが今はあまり使用される事は少ないでしょうからjpgとpngについてのみまとめておきます。
jpgの特徴
- 写真やグラデーションのある画像など色数が多い画像の場合の保存に適しています。
- 透明/半透明の画像は扱えません。
- 高画質でファイルサイズが小さくなります。
- 画質が必ず劣化します。
pngの特徴
- PC画面のキャプチャやイラストなど色数が少ない画像の場合の保存に適しています。
- 透明/半透明の画像が扱えます
- ファイルサイズが大きくなりやすい。ただしキャプチャなどのシンプルな画像の場合はjpgよりファイルサイズが小さくなります。
- 画質が全く劣化しません。
SQLを理解する上で記載する各句の実行順序を理解している事はとても重要な事です。この辺の知識がおろそかになっていると複雑なSQLを書く場合や作成したSQLのパファーマンスに問題が発生した場合、他人か作成したSQLの修正などの対応に苦慮する事になるからです(はい私の事です)。逆に各句の実行順序を正しく理解していれば複雑なSQLもスラスラ書けるようになっていきます。
では今回は「SELECT文の各句の実行順番について」まとめておきます。
SELECT文で指定可能な句
SELECT文での指定順序で記載すると以下の様になります。
- SELECT句
- FROM句
- WHERE句
- GROUP BY句
- HAVING句
- ORDER BY句
SELECT文で指定可能な句の実行順序
上記の句を実際に実行される順序に並び替えると以下の様になります。
- FROM句
- WHERE句
- GROUP BY句
- HAVING句
- SELECT句
- ORDER BY句
Web系の開発していると画面表示確認する際に、「cssやjsは変更したのに画面を表示してみると反映されていない」という事を経験した方は少なくないと思います。
こういう場合はまず、F5もしくはctrl+F5を押下して画面を再表示(リロード)確認すると思いますが、そもそも「F5単独」押下と「ctrl+F5同時」押下では何が違うんだろう?という事についてメモしておきます。
F5単独押下時のリロード
- ブラウザでキャッシュされている場合、キャッシュを利用して画面を再表示します。
Ctrl+F5同時押下時のリロード
- ブラウザのキャッシュを利用せずにサーバーにある最新の情報を読み込んで画面を再表示します。
- スーパーリロードとも呼びます
- ブラウザによって、Ctrl + F5以外でもスーパーリロードは可能です。
ブラウザ別のスーパーリロード方法
<Google Chrome、Microsoft Edge>
- Ctrl + F5
- Shift + F5
- Ctrl + Shift + R
- Ctrl + 更新ボタン
- Shift + 更新ボタン
<FireFox>
- Ctrl + F5
- Ctrl + Shift + R
- Shift + 更新ボタン
<Opera>
<Safari>
ブラウザの更新ボタンとは
上記で説明している「更新ボタン」ですが、以下の様にブラウザのアドレスバー付近に表示されている以下のような赤枠内のボタンのことを「更新ボタン」と記載しております。
junitでexceptionが発生した事の確認テストはどのようにすれば良いかメモしておきます。
exceptionの発生確認は@Test内に「(expected = [確認したいExceptionクラス])」を指定する事で簡単に確認する事が出来ます。
JUnitサンプル
「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。