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

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

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

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

2回答

7578閲覧

MSTestでListからCSVが正常に作成されたことをテストするにはどう書くのがよいでしょうか?

toshi0607

総合スコア56

C#

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

1クリップ

投稿2015/12/01 12:13

概要

List<List<T>> dataを引数にCSVを生成するクラスのテストをMSTestで書こうとしています。しかし、NUnitのように作成されるファイルを比較するAssertがMSTestに無いようで、作成されるファイルを何とどのように比較してテストすればよいか検討がつきません。
ご教示いただけましたら幸いです。

・テストコード

C#

1using System; 2using Microsoft.VisualStudio.TestTools.UnitTesting; 3using Hoge.Utils; 4using System.Collections.Generic; 5 6namespace UnitTestForHoge 7{ 8 [TestClass] 9 public class CsvBuilderUtilUnitTest 10 { 11 [TestMethod] 12 //[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"|DataDictionary|\TestData\Utils\CsvBuilderUnitTest\test_expected.csv", "test#csv", DataAccessMethod.Sequential)] 13 public void ListからCSVファイルを作成する() 14 { 15 var testList = new List<List<string>>(); 16 List<string> innerList1 = new List<string> { "あいうえお" }; 17 List<string> innerList2 = new List<string> { "かきくけこ" } ; 18 testList.Add(innerList1); 19 testList.Add(innerList2); 20 21 var csvBuilder = new CsvBuilderUtil("test.csv"); 22 csvBuilder.Write(testList); 23 } 24 } 25} 26

・テスト対象のコード

C#

1 2public CsvBuilderUtil(string path) : this(path, Encoding.Default) 3 { 4 } 5 6 /// <summary> 7 /// ファイル名、文字エンコーディングを指定して、 <see cref="CsvBuilder">CsvWriter</see> クラスの新しいインスタンスを初期化します。 8 /// </summary> 9 /// <param name="path">書き込む完全なファイルパス。</param> 10 /// <param name="encoding">使用する文字エンコーディング。</param> 11 public CsvBuilderUtil(string path, Encoding encoding) 12 { 13 var stream = new FileStream(path, FileMode.Create, FileAccess.ReadWrite); 14 this.stream = new StreamWriter(stream, encoding); 15 } 16 17public void Write<T>(List<List<T>> data) 18 { 19 foreach (var row in data) 20 { 21 this.WriteRow<T>(row); 22 } 23 } 24

環境

・.NET Frame Work 4.5
・Visual Studio2013

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

こんにちは。

私もMSTestの経験が長いわけではないのですが…
ファイル内容でAssertするものは取りあえずないとは思います。

test.csvを開いて1行づつ内容を取得した上で文字列のAssertを行うのではないでしょうか。

ただ、CSVが出力されるかどうかと、
引数のリストが処理されるかの評価が混在している気もしますが。
例えばコンストラクタでStreamを渡せるようにしてユニットテスト時はMemoryStreamを渡すとか。

投稿2015/12/01 13:09

Tak1wa

総合スコア4791

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

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

0

MS UnitTestにはNUnitにある機能のうちいくつかが欠けています。
詳細は以下のサイトを参照してください。
http://geekswithblogs.net/sdorman/archive/2009/01/31/migrating-from-nunit-to-mstest.aspx

このレベルであれば、ファイルを丸ごと比較すればいいのではないでしょうか?
例えば、↓

public static class MyFileAssert { public static void AreEqual(string fileA, string fileB) { CollectionAssert.AreEqual(System.IO.File.ReadAllBytes(fileA), System.IO.File.ReadAllBytes(fileB)); } }

投稿2015/12/01 13:19

LaLaLand

総合スコア107

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

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

toshi0607

2015/12/15 08:06

なるほどです。ありがとうございます!! 片方のファイルは事前に準備し、もう片方のファイルは今回のテスト対象でビルドすると思うのですが、それぞれどこにファイルを置くべきというのはベストプラクティスありますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問