Moq:无法将类型为Castle.Proxies.IMessageProxy的对象强制转换为'MyProject.Message'

时间:2018-02-20 11:26:03

标签: c# casting moq mstest xmlserializer

我有以下扩展方法,使用XmlSerialiser类将对象序列化为XML:

public static string Serialise<T>(this T value)
{
    if (value == null)
    {
        return string.Empty;
    }

    var xmlserializer = new XmlSerializer(typeof(T));
    var stringWriter = new StringWriter();
    using (var writer = XmlWriter.Create(stringWriter))
    {
        xmlserializer.Serialize(writer, value);
        return stringWriter.ToString();
    }
}

由于XmlSerialiser无法序列化接口类型,因此我将接口类型转换为具体类型。这是一个.NET Standard 1.3项目。

public void Submit(IMessage message)
{
    var xml = ((Message)message).Serialise();
}

使用MsTestMoq 4.8.1,以下测试失败并显示以下消息:Unable to cast object of type Castle.Proxies.IMessageProxy' to type 'MyProject.Message'

[TestMethod]
public void Submit()
{  
    var mockMessage = new Mock <IHospitalSendBatchMessage>();
    _service.Submit(mockMessage.Object);
}

我知道我不应该将接口强制转换为具体类型,但这是使序列化器工作的最快方法。有没有办法模拟铸造操作或解决这个问题的另一种方法?

0 个答案:

没有答案