このテストはどのように失敗しますか?
[TestMethod]
public void Get_Code()
{
var expected = new List<int>();
expected.AddRange(new [] { 100, 400, 200, 900, 2300, 1900 });
var actual = new List<int>();
actual.AddRange(new [] { 100, 400, 200, 900, 2300, 1900 });
Assert.AreEqual(expected, actual);
// Assert.AreSame(expected, actual) fails
// Assert.IsTrue(expected.Equals(actual)) fails
}
コレクションに関するアサーションを作成するには、 CollectionAssert
を使用する必要があります。
CollectionAssert.AreEqual(expected, actual);
List<T>
はEquals
をオーバーライドしません。そのため、Assert.AreEqual
がEquals
を呼び出すだけの場合、参照の等価性を使用してしまいます。
これが役立つと思います
Assert.IsTrue(expected.SequenceEqual(actual));
それぞれに同じ値のコレクションが含まれていることを確認する場合は、次を使用する必要があります。
CollectionAssert.AreEquivalent(expected, actual);
編集:
「2つのコレクションは、同じ要素を同じ数量で任意の順序で持っている場合、同等です。要素は、同じオブジェクトを参照しているのではなく、値が等しい場合は同等です。」 - https://msdn.Microsoft.com/en-us/library/ms243779.aspx
私はこのスレッドで他の答えを試しましたが、それらは私にとってはうまくいかず、プロパティに同じ値が保存されていたオブジェクトのコレクションを比較していましたが、オブジェクトは異なっていました。
メソッド呼び出し:
CompareIEnumerable(to, emailDeserialized.ToIndividual,
(x, y) => x.ToName == y.ToName && x.ToEmailAddress == y.ToEmailAddress);
比較の方法:
private static void CompareIEnumerable<T>(IEnumerable<T> one, IEnumerable<T> two, Func<T, T, bool> comparisonFunction)
{
var oneArray = one as T[] ?? one.ToArray();
var twoArray = two as T[] ?? two.ToArray();
if (oneArray.Length != twoArray.Length)
{
Assert.Fail("Collections are not same length");
}
for (int i = 0; i < oneArray.Length; i++)
{
var isEqual = comparisonFunction(oneArray[i], twoArray[i]);
Assert.IsTrue(isEqual);
}
}
このテストは日付入力を比較し、うるう年かどうかをチェックし、そうであれば、入力された日付から20うるう年を出力し、そうでない場合はNEXT 20うるう年を出力し、myTest.Testingは値を呼び出すmyTestインスタンスを参照します必要な計算値を含むテストと呼ばれるリストから。私がしなければならなかった運動の一部。
[TestMethod]
public void TestMethod1()
{
int testVal = 2012;
TestClass myTest = new TestClass();
var expected = new List<int>();
expected.Add(2012);
expected.Add(2016);
expected.Add(2020);
expected.Add(2024);
expected.Add(2028);
expected.Add(2032);
expected.Add(2036);
expected.Add(2040);
expected.Add(2044);
expected.Add(2048);
expected.Add(2052);
expected.Add(2056);
expected.Add(2060);
expected.Add(2064);
expected.Add(2068);
expected.Add(2072);
expected.Add(2076);
expected.Add(2080);
expected.Add(2084);
expected.Add(2088);
var actual = myTest.Testing(2012);
CollectionAssert.AreEqual(expected, actual);
}