LoginSignup
0
1

More than 1 year has passed since last update.

[C#] MSTest で Excel をデータソースにしたテスト環境構築

Last updated at Posted at 2022-10-19

概要

MSTest で Excel ファイルをデータソースにする際に、いくつか引っかかったので備忘録としてTipsを残します。

前提条件

  • OS : Windows 10
  • Microsoft Visual Studio 2017 Community

MSTest について

MSTest は Visual Studio インストール時に付属してくるテストツールです。
詳細については、以下を参照

結論

実行時にエラーが発生する場合に、以下の設定状況を見直すことで、解決しました。

  • 「Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント」のインストール
  • テスト実行時のプロセッサ設定の見直し

[詳細] Excel をデータソースとしたデータドリブンテスト

下記のテストメソッドとテストデータを例に、必要な環境構築手順を説明します。

テストメソッド

        [TestMethod]
        [DeploymentItem(@"Data.xlsx")] // テスト入力データファイルを指定
        [DataSource("System.Data.Odbc",
            "Dsn=Excel Files;dbq=|DataDirectory|\\Data.xlsx",
            "Sheet1$",
            DataAccessMethod.Sequential)]
        public void Test_ExeclDataSource()
        {
            var a = int.Parse(TestContext.DataRow["a"].ToString());
            var b = int.Parse(TestContext.DataRow["b"].ToString());

            var act = a + b;
            var exp = int.Parse(TestContext.DataRow["c"].ToString());

            Assert.AreEqual(act, exp);
        }

テストデータ

以下のテーブルを持つ Data.xlsx を作成する。

a b c
1 2 3
2 4 6
3 5 8

環境構築

1. OBDC データソースの設定

上記のテストメソッド・テストデータを用いてテストを実行したときに、以下のエラーメッセージが発生する場合は OBDC データソースの設定を行う必要があります。

ERROR [IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。

このケースでは、テストメソッドの DataSource で指定している以下の内容のが、ODBCデータ ソース に存在していないことを示しています。

  • Dsn : Excel Files

この時点で、OBDC データ ソース アドミニストレータ を確認すると以下の通り、DNS「Excel Files」のドライバが存在しない旨記載されており、またドライバーそのものにも「Microsoft Excel Driver」が存在しないことが確認できます。

image.png

image.png

この状態の場合は、以下にアクセスしドライバ (Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント) のインストールを行うことで解決します。(32bit / 64bit から選択可能)

インストール後は、以下の通りDNS「Excel Files」のドライバが構成されていることが確認できます。

image.png

2. MSTest のプロセッサ アーキテクチャ設定

ここまでセットアップした上で、テストを実行した際に以下のエラーメッセージが発生する場合は、Visual Studio のメニューから「テスト」→「テスト設定」→「規定のプロセッサ アーキテクチャ」にてインストールしたドライバーのbitと合わせることで、エラーを解消することができます。

ERROR [IM014] [Microsoft][ODBC Driver Manager] 指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています

image.png

3. テストデータの設定

この状態で、まだ以下のエラーが発生する場合はテストデータが適切な箇所に配置されていない場合があります。
下図に示す通り、テストデータに対してソリュ-ションエクスプローラより「出力ディレクトリにコピー」を「常にコピーする」に設定することで、テストプログラムからアクセス可能な位置にテストデータがコピーされます。
それでも解決しない場合は、ファイル名・拡張子・シート名等に誤りがないかを確認ください。

ERROR [42S02] [Microsoft][ODBC Excel Driver] オブジェクト 'Sheet1$' が見つかりませんでした。オブジェクトが存在していること、名前やパス名が正しいことを確認してください。'Sheet1$' がローカル オブジェクトでない場合は、ネットワークの接続を確認するか、サーバー管理者に問い合わせてください。

image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1