各高級言語が機械語に変換されるまでの道筋を纏めてみた
1. はじめに
我々が普段使用しているコンピュータは2進数(ブール代数)を採用しており、半導体の状態が導体か絶縁体かの区別しかありません。
これを01のみで表現する機械語と言いますが、人間が読み書きすることは困難を極めるため、より自然言語に近い高級言語が考案されました。
今回はC Java PHPという代表的な高級言語がいかにして機械言語に変換されていくかにフォーカスを当ててみたいと思います。
我々が普段使用しているコンピュータは2進数(ブール代数)を採用しており、半導体の状態が導体か絶縁体かの区別しかありません。
これを01のみで表現する機械語と言いますが、人間が読み書きすることは困難を極めるため、より自然言語に近い高級言語が考案されました。
今回はC Java PHPという代表的な高級言語がいかにして機械言語に変換されていくかにフォーカスを当ててみたいと思います。
■ テストってなに?なぜ必要?
テストとは簡単にいうと「このプログラム、ちゃんと正しく動いてるかな?」を確認する作業です。
入力に対して、正しい結果が返ってくるかエラーが起きてもちゃんと処理できるかプログラム同士がうまく連携できているか
…など、いろんな視点からチェックします。
◆ テストの種類って?
実際の開発では、いくつかの段階に分けてテストを行います。
テストの種類
内容
単体テスト
小さな部品(関数やクラス)が正しく動くか
統合テスト
複数の部品をつなげたときにうまく動くか
システムテスト
全体として期待通りに動作するか
今回は、Spring boot環境で開発していた際、ディレクトリ構成を修正が必要になり修正をしていた際の原因や解決方法を記載します。
ディレクトリ構成の修正後、単体テスト実行時に以下のようなbeanが読み込めないエラーが発生しました。
単体テスト実行時のエラー(部分的に書き換えています)
今回は、業務にてcsvファイルにデータを書き込む処理を作成することになり、その際に学習したJacksonを利用したcsvファイルへの出力方法についてサンプルと合わせて説明する。
csvファイルの出力方法csvファイルへの出力方法はObjectWritet.writerValue()を用いてcsvファイルにレコードを出力する。サンプルを以下に示す。
今回は単体テスト実施時にバリデーションの検証を行ったため、方法について調べたことをサンプルと合わせて説明する。
バリデーションの単体テスト方法バリデーションが付与さてれているbean(form)クラスの入力チェックを行う。
バリデーションが付与さてれているbeanクラスを以下に示す。
@Data
class TestBean {
@NotNull(message = "not null!!")
private String name;
}
入力チェックを検証を行う方法を以下のサンプルに示す。
今回はモックを利用したサービスクラスの単体テストの実装方法についてサンプルと合わせて説明する。
モックを利用するサービスクラスのテスト方法テスト対象(サービスクラス)を@Injectアノテーションで呼び出す際のcontext.xmlのサンプルはモックを利用せず、DBにアクセスするサービスクラスのテスト方法に記載している。
サービスクラスの単体テストのサンプルを以下に示す。
以下のサンプルはリポジトリをモック化し、テスト対象のメソッドでモック化したメソッドが呼び出されていることとテスト対象の戻り値を検証している。
今回は依存クラスを利用したサービスクラスの単体テストの実装方法についてサンプルと合わせて説明する。
モックを利用ぜず、DBにアクセスするサービスクラスのテスト方法テスト対象(サービスクラス)を@Injectアノテーションで呼び出す際以下のサンプルのようにcontext.xmlに記述する。
また、リポジトリを依存関係を使って呼び出す方法はリポジトリの単体テスト方法 に記載している。
今回は、業務でリポジトリの単体テストを実施したため、テスト方法や設定などをサンプルと合わせてあげたいと思います。
リポジトリの設定方法context.xmlにて<mybatis:scan>を用いてリポジトリのパスをしていすることでテスト時に@Injectで依存関係の設定する。
以下のサンプルをcontext.xmlに追加する。
<mybatis:scan base-package="リポジトリのパス"/>
DBアクセス方法
リポジトリのDBアクセスを行う場合、context.xmlにてDBのbean定義を行う。
今回はh2 databaseを使用する設定を以下に記す。
今回は単体テスト時にログの出力内容を検証をすることになったため、ログの出力内容の検証の方法で調べたことをサンプルと合わせてあげたいと思います。
出力されたログの検証方法出力されたログを検証する際、検証前に以下のサンプルのように値を設定する。
今回は単体テスト時にテスト対象にクラスが依存しているクラスが正しく使われているかなどを検証する際やテスト対象が呼び出している別クラスのメソッドの代替して処理を行う際などに使うmockの使用方法についてサンプルと合わせてあげたいと思います。
クラスのmock化方法(モックの初期化)テスト対象で呼び出しているメソッドのクラスや引数をモック化する際、mockメソッドを使用することでモック化することができる。
サンプルを以下に示す。