【发布时间】:2014-02-19 14:04:12
【问题描述】:
在我的测试中,我得到HttpRequestMessage 类型的结果,我需要断言它的属性Content 设置为正确的对象。
问题是HttpRequestMessage.Content 的(基本)类型与我要比较的对象不同,我不能像这样使用 ShouldBeEquivalentTo 和 Include :
HttpRequestMessage result = ...
result.Content.ShouldBeEquivalentTo (new ObjectContent (obj.GetType (), obj, new JsonMediaTypeFormatter ()),
options => options.Including (x => x.Value));
这无法编译,因为选项使用 Content 属性类型(即 HttpContent)而不是 ObjectContent。
我发现的唯一方法是有两个这样的断言:
result.Should ().BeOfType<ObjectContent> ();
((ObjectContent) result.Content).ShouldBeEquivalentTo (new ObjectContent (obj.GetType (), obj, new JsonMediaTypeFormatter ()),
options => options.Including (x => x.Value));
有没有更好的方法呢?可能是某种BeOfType,它返回转换对象流利断言而不是基本断言?
【问题讨论】:
-
不能使用为您提供
ISubjectInfo对象的重载?然后你可以在属性路径上使用基于文本的匹配。 -
丹尼斯,如果你的意思是反射,那我觉得会更丑。
-
不不,有一个重载可以为您提供一个 Func 到一个 ISubjectInfo。该对象提供对完整属性路径的访问,您可能可以获得相同的效果。请看第 533 行 github.com/dennisdoomen/fluentassertions/blob/master/… 中的示例。
-
啊,不知道。但它是在重构时会中断的魔术字符串:(
-
我同意。但这就是为什么首先进行单元测试的原因;-)
标签: c# fluent-assertions