ShouldBeEquivalentTo用于具有不同类型的对象

时间:2014-01-28 10:18:31

标签: c# fluent-assertions

在我的测试中,我得到类型为HttpRequestMessage的结果,我需要声明它的属性Content设置为正确的对象。

问题是HttpRequestMessage.Content有一个与我想要比较的对象不同的(基础)类型,我不能使用这样的MustBeEquivalentTo和Including:

HttpRequestMessage result = ...

result.Content.ShouldBeEquivalentTo (new ObjectContent (obj.GetType (), obj, new JsonMediaTypeFormatter ()),
                                     options => options.Including (x => x.Value));

这不能编译,因为选项使用内容属性类型(HttpContent)而不是ObjectContent

我找到的唯一方法就是有两个断言:

result.Should ().BeOfType<ObjectContent> ();

((ObjectContent) result.Content).ShouldBeEquivalentTo (new ObjectContent (obj.GetType (), obj, new JsonMediaTypeFormatter ()),
                                                        options => options.Including (x => x.Value));

有更好的方法吗?也许某种BeOfType会返回已经过对象的流畅断言,而不是基础对象?

1 个答案:

答案 0 :(得分:0)

我不确定一种更简单的方法,但是如果你试图在多个地方避免使用丑陋的代码,那么扩展方法可能会很好用:

类似的东西(我不确定这是否会按原样编译):

public static class ShouldBeHelper
{
    public static void ShouldBeSameContent(this HttpRequestMessage result, object expected)
    {
        result.Should().BeOfType<ObjectContent>();

        ((ObjectContent)result.Content).ShouldBeEquivalentTo(new ObjectContent(expected.GetType(), expected, new JsonMediaTypeFormatter(),
            options => options.Including(x => x.Value));
    }
}