MustBeEquivalentTo для объектов с разными типами

В моем тесте у меня есть результат типа HttpRequestMessage и мне нужно утверждать, что это собственность Content настроен на исправление объекта.

Проблема в том, что HttpRequestMessage.Content имеет другой (базовый) тип, чем объект, с которым я хочу сравнить, и я не могу использовать ShouldBeEquivalentTo и Inclusion, например:

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 который возвращает беглое утверждение отлитого объекта вместо базового?

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));
    }
}
Другие вопросы по тегам