質問: new DataTable(); TableTest.Columns.Add("name"); TableTest.Rows.Add("AAA"); TableTest.Rows.Add("BBB"); TableTest.Rows.Add("CCC"); TableTest.Rows.Add("DDD"); TableTest.Rows.Add("EEE"); TableTest.Rows.Add("FFF"); CBtest.combodataGet(); Assert.AreEqual(TableTest, CBtest.Combotb); } ```
回答: 依然として CBtest.Combotb とか定義不明ですが、要するに 2 つの異なるインスタンスの DataTable の中身が同じかどうか調べたいということと理解してレスします。 検証などはしておらずググって調べた限りですが、質問者さんのコード、 ``` Assert.AreEqual(TableTest, CBtest.Combotb); ``` は Assert.AreEqual メソッドの多々あるオーバーロードの内、Assert.AreEqual メソッド (Object, Object) を呼び出しているはずです。 その場合、参照の等価を調べることになり、2 つの DataTable のインスタンスが異なればアサーションは失敗するはずです。詳しくは以下の記事を見てください。 Assert.AreEqual method usage in checking DataTable types 何にせよ、Assert.AreEqual メソッドでは、DataTable の中身が同じかどうか調べるのは無理です。 Assert クラスの他に、コレクションを扱う CollectionAssert クラスがありそれにも AreEqual メソッドが実装されています。詳しくは以下の記事を見てください。 C#でのテスト ただし、それも ICollection を継承したコレクション同士を比較するものであり、DataTable を直接比較することはできなそうです。 CollectionAssert.AreEqual を使うなら DataTable を何らかの方法で ICollection を継承したオブジェクトに変換し、それを比較することになりそうです。 なお、本題とはちょっと違う話ですが、同じがどうか調べると言っても、「値の等価」を調べるのか「参照の等価」を調べるのかで話が違ってきますのでご注意ください。「値の等価」「参照の等価」について、詳しくは以下の記事を見てください。 2つの値が等しいか調べる、等値演算子(==)とEqualsメソッドの違い