1

在我的测试中,我有类型的结果,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返回铸造对象流利断言而不是基本断言?

4

1 回答 1

1

我不确定是否有更简单的方法,但如果您试图避免在多个地方出现丑陋的代码,扩展方法可能会很好地工作:

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

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));
    }
}
于 2014-01-28T14:16:12.063 回答