まず第一に、メソッドから無名型オブジェクトを返すべきではありません! 後でそのような戻り値を使用して何かを行うのは非常に困難です。
Devidedという新しい構造体を作成します。
public struct Devided
{
public int Reminder { get; set; }
public List<int> Numbers { get; set; }
public override bool Equals(object obj)
{
if(!(obj is Devided))
return false;
var d = (Devided)obj ;
if(object.ReferenceEquals(this, d))
return true;
return this.Reminder == d.Reminder && this.Numbers.SequenceEqual(d.Numbers);
}
public override int GetHashCode()
{
return Reminder;
}
}
私は 仕事をするためにオーバーライドEquals
しました。GetHashCode
CollectionAssert
クラスを使用Devided
すると、メソッドの戻り値の型をジェネリックに変更できますIList<Devided>
。
public static IList<Devided> dividedNumbersto5(IEnumerable<int> NumberOfCollection)
{
IList<Devided> reminderNumber = NumberOfCollection.ToList().GroupBy(g => g % 5).OrderBy(g => g.Key)
.Select(g => new Devided { Numbers = g.ToList(), Reminder = g.Key }).ToList();
return reminderNumber;
}
そしてアサートテスト:
[TestMethod]
public void TestMethod1()
{
IEnumerable<int> numberOfCollection = new List<int> { 5, 14, 9, 8 };
IList remindernumber = dividedNumbersto5(numberOfCollection);
IList expectedNumberCollection = new List<Devided>
{
new Devided { Numbers = new List<int>() { 5 }, Reminder = 0 },
new Devided { Numbers = new List<int>() { 8 }, Reminder = 3 },
new Devided { Numbers = new List<int>() { 14, 9 }, Reminder = 4 }
};
CollectionAssert.AreEqual(expectedNumberCollection, remindernumber);
}
Reminder
次の場合は、sのみをチェックできます。
var expectedNumberCollection = new List<int> { 0, 3, 4 };
Assert.IsTrue(expectedNumberCollection.SequenceEqual(remindernumber.Select(x => x.Reminder)));