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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

Q&A

解決済

3回答

4253閲覧

C#のDB接続を使用したユニットテストに関して

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

0グッド

0クリップ

投稿2018/07/20 00:23

編集2018/07/20 01:10

前提・実現したいこと

・DB接続を使用したユニットテストを行いたい

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

初めて質問いたします。
現在VisualStudioを使用しプログラミング研修を行っています。
DAOを作成し正常系のテストを実施したのですが、DB接続の部分で失敗してしまいます。
他クラスではDB接続はできていたため、文法の間違いはないかと思います。
ユニットテストではDB接続はできない仕様なのでしょうか。

開発環境

OS:Windows10

ツール:
・ASP.NET
・Visual Studio 2017
・SQL Server 2014

該当のソースコード

/// <summary> /// ID重複確認用メソッド /// </summary> /// <pre> /// 引数としてint型IDを受け取り、SQLサーバーに検索をかける /// IDの重複がなければ、0を返し、重複があれば1を返す /// </pre> /// <param name="id"></param> /// <returns></returns> public int CountByPrimaryKey(int id) { int cnt = 0; try { using (SqlConnection conn = new SqlConnection( ConfigurationManager.ConnectionStrings["DB"].ConnectionString)) { conn.Open(); //sql文 StringBuilder sb = new StringBuilder(); sb.Append("SELECT COUNT(*)AS CNT FROM dbo.USER_MASTER WHERE ID = @Id"); SqlCommand sql = null; SqlDataReader reader = null; try { if (Logger.IsDebugEnabled) { Logger.Debug(sb.ToString()); } sql = new SqlCommand(sb.ToString(), conn); sql.Parameters.AddWithValue("@Id", id); if (Logger.IsDebugEnabled) { Logger.Debug(sb.ToString()); } reader = sql.ExecuteReader(); reader.Read(); cnt = reader.FieldCount; } catch (Exception e) { Logger.Fatal(e); throw new Exception(); } } } catch(Exception e) { Logger.Fatal(e); throw new Exception(); } return cnt; }

テストコード

[TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { DataAccessObject test = new DataAccessObject(); int id = 1; int i = test.CountByPrimaryKey(id); Assert.AreEqual(i, 0); } }

エラーメッセージ

System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'

System.Configuration.ConnectionStringSettingsCollection.this[string].get が null を返しました。

システム構成

ソリューション'MyStudy.net'
|
|
|---Step2(プロジェクト)
| ・DataAccessObject.cs
| ・Web.config
|
|---Step2Test(テストプロジェクト)
| ・UnitTest1.cs

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/07/20 00:29

> DAOを作成し正常系のテストを実施したのですが ←見たところ ADO.NET + SqlClient に見えますが?
退会済みユーザー

退会済みユーザー

2018/07/20 00:32

> DB接続の部分で失敗してしまいます。 ←エラーメッセージが出てると思いますが、それを略さずコピペして書いてください。それとあなたの開発環境(OS, .NET, Visual Studio, SQL Server のバージョンなど)を書いてください。
alg

2018/07/20 00:34

SurferOnWwwさん DAO は、おそらくMSの提供するDAOではなく一般的な意味でのData Access Objectを指すのではないでしょうか。
退会済みユーザー

退会済みユーザー

2018/07/20 00:34

もう一つ、コードは ``` と ``` で囲ってください。インデントされて見やすくなります。
guest

回答3

0

System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'

System.Configuration.ConnectionStringSettingsCollection.this[string].get が null を返しました。

たぶん、以下の行でエラーが出ているのだと思いますが、そうだとすると、それは SQL Server に接続して操作する以前の問題で、接続文字列が取得できてないのでしょう。

using (SqlConnection conn = new SqlConnection( ConfigurationManager.ConnectionStrings["DB"].ConnectionString))

App.config に接続文字列の設定はありますか?

投稿2018/07/20 00:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/07/20 00:49

回答ありがとうございます。 DAOのプロジェクトのweb.configには接続文字列の設定はしております。
退会済みユーザー

退会済みユーザー

2018/07/20 00:56 編集

web.config? ということは ASP.NET Web アプリですか? ソリューション/プロジェクトは全体的にどういう構成になっているのでしょう? 「テストコード」というのはどこに存在するのですか? あと、開発環境を書いていただくようお願いしたのですが、無視しないで書いていただければと思います。 #Microsoft のアプリでは DAO と言うよりは、ADO.NET + SqlClient と言った方が良いかと思います。
退会済みユーザー

退会済みユーザー

2018/07/20 01:11

構成と開発環境の追記をいたしました。 ご確認いただければ幸いです。
guest

0

ベストアンサー

プロジェクトが異なれば別の設定ファイルが使われます。
テストプロジェクトで接続文字列を設定していないのではありませんか?

投稿2018/07/20 00:39

Zuishin

総合スコア28656

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

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

退会済みユーザー

退会済みユーザー

2018/07/20 00:47

回答ありがとうございます。 おっしゃるとおり、テストプロジェクト側で接続文字列を設定しておりませんでした。 テストプロジェクト側にweb.configを作成し、同じように接続文字列を設定する必要があるということでしょうか。
Zuishin

2018/07/20 01:02

おそらくテストプロジェクトは ASP.NET ではないと思います。Properties.Settings.settings を編集してください。
退会済みユーザー

退会済みユーザー

2018/07/20 01:24

Zuishin様のアドバイスどおりにProperties.SettingsでDB接続を設定したら接続ができました! テストも問題なく動きました! ありがとうございます!
guest

0

皆様にご指摘いただき無事にDB接続がテストプロジェクト側でできました。

テストプロジェクト側でProperties.Settings.settingsで接続文字列を指定することで接続ができました。

別のプロジェクトであったため、テストプロジェクト側でも指定が必要という初歩的なミスでした。

お付き合いいただいた皆様、お忙しい中ありがとうございました。

投稿2018/07/20 01:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問