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));
}
}