プログラマー初心者blog

当ブログにようこそ!!!

【新人日記9】ユニットテスト苦しみ

DAOのユニットテストに苦しまされる

みなさんこんばんは!

ついについについに待ちに待った休日ですね!!(∩´∀`)∩

私はもう達成感をとてつもなく感じております(笑)

今日はこの1週間で最も過酷といえる日でした。

なぜそうなったかをお話しできればなと思っています

誤字に苦しめられる

昨日に引き続き、DAOのユニットテスト実行がうまくいかず、

正しく書いているはずなのにと自分の中で

思っていて苦し紛れに上司に相談に行きました。

すると、【data】と書かなければならないところを【date】と記載しており、

それを上司に見つけてもらい、慰めてもらいました(笑)

二回目の誤字

そして、またもやエラーが。エラーが出て修正したと思ったら、

今度は間違ったテーブル名がログに出ている!!

こんなのしてないわと思い、これはeclipseの不調だと思って

上司に相談に行ったら今度は使用するテーブル名をまとめている

テキストファイルにその誤字が発見され、修正したと思ったのに、

その修正により違う個所をミスってしますという失態。

結局は、CSVに書いていたテーブル名の間にカンマ(,)が抜けていたというミス

また上司に迷惑をかけてしまいました...

「これ以上上司に迷惑かけれない」という気持ちで

次のユニットテストの作成に進みました

またもやミスかと思ったら…

次は、また違うDAOクラスでテストを作成して、

またもやエラーが発生してしまいました。

そのエラーを探すだけで3時間は費やしました。

しかし、3時間たってもそのエラーを発見することができず、

ストレスも限界になってきて、これ以上相談するのも申し訳なくなってきた

上司に相談したら既存のファイルを上司が訂正したファイルで

上書きしないと動かなかったみたいで、解決してめちゃくちゃうれしかった半面

俺の3時間は何だったのだろうと後悔しました。

しかし、これでユニットテストの1画面が終了し、残すはあと2画面。

しかも記述量意外と少ない部分!!だと思う…(笑)

区切りよく終えれたのでいい週末を迎えられそうです(。-∀-)

それでは短いですが、今週もお疲れさまでした!!

しっかり週末楽しみましょう!!

おやすみなさい(-。-)y-゜゜゜

【新人日記8】DAOクラスのユニットテスト作成について

DAOクラスのユニットテスト作成

みなさんこんばんは!!

本日はyoutuberのスカイピースが解散のドッキリのような動画を出されていて

完全に騙されました(笑)

しかし、一緒に何かを成し遂げる友人や仲間っていいものだなと

とても感じました。

さて、本日はDAOクラスを上司に教えていただいたので

備忘録に残していきたいなと思っています。

DAOクラスを作成する手順は以下の通りです。

  1. データベースの代わりとなるCSVを自ら作成する
  2. テストデータ作成
1.データベースとの代わりとなるCSVの作成

他のクラスを作成する際にはMockという

対象のクラスが呼び出しているクラスとの関係を断ち切り

自ら値を設定するものを利用していました。

しかし、DAOクラスでは呼び出すクラスがSQLしかないので

データベースの値を自ら作成するそうです。

私は恥ずかしながらCSVが何かわからなかったので備忘録として…

CSVとは

拡張子「.csv」のCSVファイルは互換性が高くExcelのみならずメモ帳、メールソフト、

データベースソフトなどほとんどのソフトに取り込んで閲覧、編集することが可能です。

出典:いまさら聞けないIT用語:CSVファイルとEXCELファイルって何が違うの?

URL:https://data.wingarc.com/csv-excel-2-19747

CSVファイルでのデータ作成法

CSVでのデータ作成の方法としては以下の通りです

"カラム名1","カラム名2","カラム名3","カラム名4"

"カラム名1のデータ","カラム名4のデータ","カラム名4のデータ","カラム名4のデータ",

といったように作成します。

もちろんデータがintegerだとダブルクォーテーションは必要ありません。

このようにしてCSVファイルを作成していきます。

そして、テストデータファイルの中でselectByIdを使用する際なら、

それで使用するテーブル名を記載したファイルを作成しておきます。

テストの作成

テストの作成に移ります。

テストの作成はまず、使用するDAOを@Autowiredします。

そこから@testを付け、

クラスを定義し、テストベースのクラスを継承します

(プロフェクトによって違いあり)

そこから、SQLを実行し、その戻り値を受け取るような記述をします。

例:Entity res = dao.selectById(引数);

    assertThat(res.検証したい値).isEquals(予想できる値);

で検証を行います

    データ件数が複数の場合はList形式で処理結果を受け取る形に変更をします。

リスト形式の場合の検証方法は.containを使用します。

assert(list).contain("1","3","2")

これについてはすべて含まれている必要がなく、

並び順も検証判断基準には含まれないそうです。

このようにして、DAOのユニットテストを作成します

私の現状

私はこれに習ってテストを作成していますが、CSVの呼び出しがうまくいっていません

そのため、明日は上司に泣きつこうと思っています(笑)

本日は以上となります。少しでも誰かの役に立てればと思っていますので

よければ今後も見てやってください。

それではおやすみなさい(。-∀-)

【新人日記7】JavaSilver振り返り

JavaSilver結構難しい??

みなさんこんばんは!!

最近、新人内でたくさんの仕事を任されてサービス残業

これから始まるのかと危機感を感じております(笑)

今日はユニットテスト作成工程で難しく、進捗が5%しか進まず、

危機感を抱いています(笑)

現在の担当箇所の進捗が65%で「明日には終えます!!」と

上司に宣言しちゃったし頑張ります(;´Д`)

ペンギンに仕事を任せたい(わかる人にはわかる(笑))

本日は帰宅後1か月後に迫っているJavaSilverの勉強を進めました。

昨日も皆さんに紹介したブログのように

基本的なことがわからない状態で焦っています。

さて、本日はJavaSilverに本当に受かるのか心配になっているので

JavaSilverの概要について書いて、

あとはボヤキをしていきます!!気分を害されたらすみません...

JavaSilverとは

Java開発に必要な基本的な知識を持っている開発初心者向けの資格であるそうで、

初心者的にも難しいと感じています(Java歴3か月)

Java Silverの試験は全180分・80問の選択形式の試験です。

63%以上の点数で合格とみなされます。

f:id:PGma-kun-blog:20210715000059p:plain

引用元:Thinkit URL:https://thinkit.co.jp/article/9477

すべての問題が選択式なので分からない問題でも

答えを導き出せる可能性があるのではないでしょうかと思います。

試験の申し込みは初めてされる方は手順等が結構難しいので、

こちらのページを参考にするといいと思います。

nanayaku.com

とにかくひっかけ問題が多い

JavaSilverの問題をある程度といてみて感じたことは

とにかくひっかけ問題が多いということです。

例えば、

public static void main (String args) {

といった記述はよく見ると思いますけど大半の人がしっかり見ていない

箇所の一つだと思います。

それより下は正しい処理が記載されていたので

「正しく処理が行われている」と思いと回答したら、

public static void main (String args) {

となっていて、が抜けているのでコンパイルエラーが正答となっていました。

また、三項演算子
if(条件式 ? 条件式 ?  trueの場合:falseの場合){

となっており、「?」と「:」は交互だからコンパイルエラーとなっており、

またもや、ひっかけられました。

おすすめの勉強法

どこのサイトを見ても、どの上司に聞いても黒本がおすすめといわれました。
そのため、私が買った本を紹介しておきます。

徹底攻略 Java SE 11 Silver 問題集 [1Z0-815]対応 [ 志賀澄人 ]

価格:3,740円
(2021/7/15 00:30時点)
感想(2件)

 

押しておきますが、JavaSilverを取った人全員が、これで勉強したといわれるくらい

この本をお勧めされました。

この本の問題がそのまま出る箇所もあるよと教えていただき、即購入しました。

3000円ちょっと課金して試験1回で終わらせれると思ったら安い安い!!

シンプルにソースが読みにくい

ひっかけたい気持ちはわかるが解きにくい!!

というボヤキでした。気分を害した方はすみません。

自分がバカなだけです(笑)

勉強頑張ります(。-∀-)

おやすみなさい(^^)/

【新人日記6】JavaSilverに向けて

JavaSilverに向けた勉強

みなさんこんばんは!!

最近よくない天気が続いていますねー(;´Д`)

悪い天気なんかはねのけて今週を乗り切りましょう(。-∀-)

さて、これから、私がJavaSilverの勉強で分からなかった点などを上げていきます。

  • Staticメソッド
  • subStringメソッド
  • StringBuilderクラス
  • trimメソッド
staticメソッド

staticメソッドはインスタンスを生成せずに使えるメソッドのことであり、

static変数は、2度同じメソッドを呼び出す場合、

1回目に呼び出して変化した値を保持した状態

2回目の処理を行います。

subStringメソッドとは

subStringメソッドとは、String形に定義されている、

文字列の一部を切り出すメソッドです。

使い方

文字列.subString(取得したい頭の文字番号、最後の文字番号)

※取得したい頭の文字番号のみでも可(文字番号の後ろのすべての文字を取得)

これを使うことで、年月日など文字列の形を整えることができるそうです。

例:20210714 ⇒ 2021年07月14日

stirngBuilderクラス

StingBuilderクラスは文字列を結合できるクラスです。

使い方

StringBuilderクラスをインスタンス

StringBuilder stringBuilder = new StringBuilder;

値を追加

stringBuilder.append("1,2,3,");

stringBuilder.append("4,5,6");

stringBuilder.append("7,8,9");

値を取得

stringBuilder.toString();

といった流れです。

すると取得できる値が1,2,3,4,5,6,7,8,9となります(^^♪

trimメソッド

このメソッドは、文字列の前後にある空白を除去したいときに用いられます。

使い方

空白を除去したい文字列.trim();

です。

 

今日のブログはJavasilverで分からなかったほんの一部にすぎません(笑)

ほぼパクリ...

もっと頑張って1か月後の資格取得目指すぞー!!

 

 

【新人日記5】備忘録(ユニットテスト)

ユニットテスト(単体テスト)

みなさんこんばんは!!

本日から仕事が始まった方も多いのではないでしょうか(;´Д`)

私は月曜の朝に起きるのが一番しんどいです…

中国地方はとてつもない雷雨が続いてますが皆さんも気をつけてくださいね!

 

さて、本日はユニットテストで学んだことを書いていこうと思います。

自分の所感が混じったりしているので正しいものとは限りませんのでお気を付けを…

テストの書き方

現在、開発しているユニットテストではクラスごとのテストを行っています。

そのテストの流れでは3工程でクラスをテストをしています。

  1. 準備-Mockで値を作成する。
  2. 実施-対象のクラスを実行する
  3. 検証-実施したクラスが正しい値が取れているかを確認する

この流れで私の業務ではユニットテストを行っています。

Mockとは

Mockとは、ユニットテストを行う対象のクラスが呼び出している

クラスとの関係を断ち切り自ら値を設定するものと認識しています。

これを使うことでSQL等を実行しなくて済み、

データベースの値を書き換えることなくテストを行えるというメリットがあります。

値の設定の仕方【when().thenReturn()】

先ほど紹介したMockに値を設定したい場合、

まず、その実行してその戻り値の型を受け取れるようにインスタンスします。

例: Hoge hoge = new Hoge;

そこから、

when().thenReturn()を使います。

これの書き方は、when(設定したい値).thenReturn(返ってきた値を格納する箇所);

※返ってきた値を格納するものは先ほどインスタンス化した箇所。

検証【assertion】

検証をするときはassertionを本日は使用しました。

特に使用したのは

assertThatというもので、

書き方はassertThat(検証したい値,isEquals(予想できる戻り値));

です。

この流れでテストをたくさん組んでいこうと思います!!

この流れを学んでいたら本日の業務は終了しましたww

健康診断もあったし、明日はもっと頑張ろう(^^)/

所感も混じっていてわかりにくい点や間違っている点があるかもしれませんが

その点はお許しを

それでは本日もお疲れ様でした!!

おやすみなさい(。-∀-)

【新人日記4】私の趣味(ダーツ)

私の趣味

みなさんこんばんわ!(^^♪

明日から仕事が始まってしまいますね…

この日曜日の夜にどのようにしたら

仕事に対するにモチベーションを上げれるかを最近考えています。

何かいい方法があれば皆さん教えてください!!

そこで、本日のブログは私の趣味について話していければなと思っています。

私の趣味はダーツをすることです。

ダーツを投げる人のイラスト(男性) | かわいいフリー素材集 いらすとや

ダーツの魅力

ダーツの魅力は、

  1. 人間性を高めることができる
  2. 幅広い年齢層の人と仲良くなれること

これについて魅力を伝えられるといいなあと思っています。

1.人間性を高めることができる

これについてはどのスポーツでも同じことだと思うのですが、

やはり人間なので、うまくいかないことがあればイライラすることがあると思います。

多くのスポーツを経験してきた私ですがダーツというスポーツは

特にそれがあるスポーツであるということを感じました。

ダーツはとても楽しいスポーツですが、

その反面うまくなるにはとても難しいスポーツです。

野球やサッカーといったスポーツは上手な人が

「どのように体を動かすと上手にできるよ」

といったことを真似してみるとうまくなれると思います。

しかし、ダーツは人の体のつくりは人それぞれで、

上手な人にアドバイスをもらったとしても、

それができなかったりうまくならず逆に下手になってしまうことがあります。

また、昨日までうまくいっていたことが、

その日の体の調子でうまくいかないことも多いです。

それで、イライラしている人も多く見てきました。

ダーツはメンタル競技といわれていますが、

うまくいかなくてイライラしてしまったら余計にうまくいかなかったりするので

自分自身の気持ちをコントロールすることができるようになったりなど

我慢してうまくなったときはもう最高です(^^♪

ほかにも多くの面で成長できますがこれが代表的な一例として、

ダーツという競技は人間性を高めることができるという説明でした!!

2.幅広い年齢層の人と仲良くなれる

私は大学時代、ダーツにドはまりして、ダーツバーに毎日のように通っていました。

バイト代をすべてつぎ込むレベルで(笑)

するとそこのオーナーさんから働いてみないかと言ってくださいました。

そこでは、多くのお客さんとかかわることができました。

もちろん同年代のお客さんから、上は60代のお客さんまで、

一緒にバーベキューをしたり仲良くさせてもらっていました(^^♪

ダーツという競技は

数十グラムのものを二メートル程度離れた的に向かって投げるだけなので、

誰でも競技を楽しめるという強みがあり、幅広い年齢層の方がされています。

世界では60代の方もトッププレーヤーでいるくらいです( ゚Д゚)

なので、私の働いていたダーツバーでは多くの人と関わり、

みんなでバーベキューをしたりと、とても充実していました。

「あの日々も楽しかったなー」と新入社員の嘆きですww

 

こんなに楽しいダーツを始めてみたいと思ったあなた!!
マイダーツって高いんでしょ」と思うかもしれません。

しかし、安くて質のいいものもたくさんあります。

正直ダーツって最初ってなんでもいいんです(笑)

まずは、マイダーツをもってダーツを投げに行ってダーツって楽しいことを

実感してみてください!!

私が最初に買ったダーツを紹介します!

【初心者向け】ダーツ セット 初めての タングステン バレル フライト ダーツケース ティップ 付き (メール便OK/20トリ)

価格:3,333円
(2021/7/11 22:30時点)
感想(8件)

超激安でこのワンセットさえあれば、すぐ投げに行くことができます。

今はいろんなものを買っていますが最初はこれだけあれば充分です!!

 長々となりましたが、やはりダーツって最高です!!

 皆さんもしてみてはいかがでしょうか最高のダーツライフを!!

【新人日記3】Webアプリケーション開発新工程

やっと製造工程終了

やっと★金曜日★ですね(。-∀-)

先日、紹介したようにいろいろたくさんのやらかしたところもありましたが、

製造工程が終了しました。先輩には謝りまくった一週間でした(笑)

本当にJavaしか知らない私が、SpringBootthymeleafSQLとか

多くのことを経験させてもらえた1週間でした。

最も困ったこと

一番困ったのはSQLで全然ほしいデータを取得することができませんでした

設計書通りのソースはかけたとしても自分が何をしているのかさっぱり状態でした...

サブクエリ?内部結合?外部結合?といった疑問点盛沢山でした。

サブクエリは比較したい対象を絞り込みを押しておきたい場合に使うもの

内部結合は、データを結合したい箇所がお互い存在しあうもの

外部結合は、結合したいデータが存在しなくても結合が可能できるもので

データが存在しない箇所にはNULLが入るといったざっくりした感じですが

なんとなくは掴めてきました。

もう一回やれと言われたらできるのか不安だなぁ(笑)

次の工程「単体テスト

製造工程が終わって、やっと一区切りだと思ったらすぐに次の

単体テスト工程に…

休んでる暇はありません

今日単体テストについての説明を受けましたが、

単体テストは、作成したクラスごとで

とにかく全部の考えられるパターンを試していくものと教えてもらいました

SpringBootの新しい@アノテーションを教えてもらって

頭がパンクしそうになりました(~_~)

@mockとかとにかく難しいことばかりで

また、上司たちの時間を削ってしまうことを考えると

休日も落ち着きませんww

ソースコードを書くことはとても楽しく、ソースコードを書き終えて

プログラムが動いた時の達成感にはまってしまいそうですが、

悩む時間やエラーが発生した時の精神的ダメージがすごいですww

それでも、来週はまたやってくる苦しみ(-_-;)

休日はゆっくり過ごすことにブログを書きながら決心しました。

疲れマックスで書いてることごちゃごちゃですがお許しを(-_-;)

明日はJavasilverの教材が届きます。開封はいつになることやら…

それではおやすみなさい(つ∀-)