Если вы не используете Typemock Isolator или Moles, вы не можете заменить что-либо внутренне созданное ключевым словом new
.
Сначала вам нужно будет извлечь интерфейс из XmlSerializer, а затем внедрить его.в класс.
Например, вы можете ввести этот интерфейс:
public interface IXmlSerializer
{
public void Serialize(Stream stream, object o);
}
Вставьте это в свой класс Mailer следующим образом:
public class ClientConfiguration
{
private readonly IXmlSerializer serializer;
public ClientConfiguration(IXmlSerializer serializer)
{
if (serializer == null)
{
throw new ArgumentNullException("serializer");
}
this.serializer = serializer;
}
public virtual bool Save(string fileName)
{
using (StreamWriter writer = new StreamWriter(fileName))
{
this.serializer.Serialize(writer, this);
}
return true;
}
}
Теперь вы можетевставьте макет в класс:
var mock = new Mock<IXmlSerializer>();
var sut = new ClientConfiguration(mock.Object);
В приведенном выше примере используется Moq.