質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

4081閲覧

junitでNullPointExceptionが発生してしまう

onigiri_mogu

総合スコア15

pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/01/22 12:42

前提・実現したいこと

初めて、junitを活用して、テストをしています。
STS,pgadmin3とdbfluteを使用して
ローカルにあるデータベースからデータを取ってくるプログラムを作っています。

どのようにすればExceptionが発生しなくなるのでしょうか?

発生している問題・エラーメッセージ

プログラムを作ったので、junitでテストをすると NullPointExceptionが出てしまい、データを取得出来ません。 (発生箇所:ComeOn.java のコメント部分)

該当のソースコード

*都合上一部省略しているところ、名前を変更しているところがあります。
↓ソースコード1
ComeOn.java

Java

1package (src/main/java内の任意のパッケージ); 2 3import ().ServerException; 4import ().ServletFactory; 5import ().MngService; 6import org.springframework.stereotype.Service; 7 8@Service 9public class test{ 10 11 MngService MngService; 12 13 public test() throws ServerException, IOException { 14 try { 15 ServletFactory.setup(); 16 } catch (ServerException | IOException e) { 17 throw e; 18 } 19 } 20 21 public void execute() { 22 // IDを基にマスタより事前に追加したレコードを取得 23 final String Id = 1; 24 Mng Info = MngService.getMng(Id); //ここでNullPointExceptionが発生 25 if (Info == null ) { 26 return; 27 } 28 } 29}

↓ソースコード2(junitでテストするコード)
ComeOnTest.java
※assertionを使っていませんがそれ以前の問題になっています。

Java

1package (src/test/java/(ComeOnTest.javaが格納されているパッケージと同名)); 2 3import static org.junit.Assert.*; 4import org.springframework.beans.factory.annotation.Autowired; 5import org.junit.Test; 6import org.springframework.beans.factory.annotation.Autowired; 7import org.thymeleaf.util.StringUtils; 8 9import ().MngBhv; 10import ().Mng; 11import ().BaseSpringTest; 12import ().MngService; 13 14public class ComeOnTest extends BaseSpringTest { 15 16 17 @Autowired 18 MngService mngService; 19 20 @Autowired 21 MngBhv mngBhv; 22 23 24 @Test 25 public void testExecute() throws Exception { 26 { 27 //対象のDBへのレコード追加(事前準備) 28 Mng recode = new Mng(); 29 recode.setId("1"); 30 recode.setTargetDate(20190122095059L); 31 mngBhv.insert(recode); 32 } 33 34 ComeOn comeOn = new ComeOn(); 35 comeOn.execute(); 36 37 } 38}

↓ソースコード3(Exception発生部分のもとのコード)
MngService.java

Java

1package (ComeOn.javaと同一パッケージ).service; 2 3import org.apache.commons.lang3.StringUtils; 4import org.springframework.beans.factory.annotation.Autowired; 5import org.springframework.context.annotation.Scope; 6import org.springframework.stereotype.Service; 7 8import ().dbflute.exbhv.MngBhv; 9import ().dbflute.exentity.Mng; 10 11@Scope("prototype") 12@Service 13public class MngService { 14 15 @Autowired 16 private MngBhv mngBhv; 17 18 /** 19 * 主キー(バッチID)に該当するレコードを返却する 20 * @param Id ID 21 * @return 主キーに一致するレコード 22 */ 23 public Mng getMng(String Id) { 24 if (StringUtils.isBlank(Id)) { 25 throw new IllegalArgumentException(String.format("IDが不正です。)); 26 } 27 return mngBhv.selectByPKValue(Id); 28 } 29}

試したこと

  • pgadminの方には、準備したデータが作成されていました。
  • 強引ですが、試しにComeonTest.javaのtestExecute()内にComeon.javaのexcute()内の処理を書き、

ComeOn.javaのexcute()内の処理をコメントアウトして実行したところExceptionが発生しませんでした。

補足情報(FW/ツールのバージョンなど)

すみません、インストールしたときのファイル名を記載します。
pgadmin:3-1.22.1
sts:2.1.2.5
vagrant:1.9.3

いくつか類似質問を見たのですが理解できずいてる次第です。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

テストクラスが継承しているクラスの実装がないので明確な回答にはならないかもしれませんが、
MngService のインスタンスを取得していないのでnullになります。

テスト実行する際にはSpringのBean定義からServiceクラスを取得するのか、それともモッククラスから取得するのかしなければ動作しません。

継承しているクラスを実装された方が正しい実装方法を知っているかと思いますが。

投稿2019/01/22 13:22

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

onigiri_mogu

2019/01/23 02:58

シングルトンについて調べてみたのですが、まだ理解ができませんでした。 いくつか質問させてください。(見当違いであればすみません) 1.MngServiceのインスタンスの取得をするところは、ComeOn.javaのクラス内かつメソッドの外ということでしょうか?  (ComeOn.javaの"MngService MngService;"となっているところを"MngService MngService=new MngService();"と直す) 2.質問1のようにしたとき、MngService.javaには、コンストラクタがない状況です。   コンストラクタの作成も必要でしょうか?
onigiri_mogu

2019/01/24 02:29

インスタンスを取得したら解決しました。 しかし、継承しているクラスでも同じようにNullPointExceptionが発生したので、 A-pzさんのおっしゃるとおり、手間はかかりますが、継承しているクラスを実装していこうと思います。 ご回答いただき、ありがとうございました。大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問