我有任何Pilot
具有 () 属性的 () 对象数组Hanger
,它可能为 null,它本身具有 ( List<Plane>
) 属性。出于测试目的,我想将其简化并“展平”为具有属性PilotName
(string) 和Planes
(array) 的匿名对象,但不确定如何处理 nullHanger
属性或空PlanesList
.
(为什么是匿名对象?因为我正在测试的 API 对象是只读的,并且我希望测试是“声明性的”:自包含、简单且可读……但我愿意接受其他建议。另外,我我试图了解更多关于 LINQ 的信息。)
例子
class Pilot
{
public string Name;
public Hanger Hanger;
}
class Hanger
{
public string Name;
public List<Plane> PlaneList;
}
class Plane
{
public string Name;
}
[TestFixture]
class General
{
[Test]
public void Test()
{
var pilots = new Pilot[]
{
new Pilot() { Name = "Higgins" },
new Pilot()
{
Name = "Jones", Hanger = new Hanger()
{
Name = "Area 51",
PlaneList = new List<Plane>()
{
new Plane { Name = "B-52" },
new Plane { Name = "F-14" }
}
}
}
};
var actual = pilots.Select(p => new
{
PilotName = p.Name,
Planes = (p.Hanger == null || p.Hanger.PlaneList.Count == 0) ? null : p.Hanger.PlaneList.Select(h => ne
{
PlaneName = h.Name
}).ToArray()
}).ToArray();
var expected = new[] {
new { PilotName = "Higgins", Planes = null },
new
{
PilotName = "Jones",
Planes = new[] {
new { PlaneName = "B-52" },
new { PlaneName = "F-14" }
}
}
};
Assert.That(actual, Is.EqualTo(expected));
}
直接的问题是线路expected... Planes = null
错误,
不能分配给匿名类型属性,但承认潜在的问题可能是 using
null
inactual
is usingnull
并不是最好的方法。
任何想法如何分配空数组或采用与inexpected
不同的方法?null
actual