gpt4 book ai didi

c# - 模拟接口(interface)仍会序列化为文件吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:26 25 4
gpt4 key购买 nike

我正在尝试对文件的保存进行单元测试。我有一个定义文档的接口(interface),我将一个实现该接口(interface)的具体对象传递给 Save 方法,它在实践中有效,但我正在尝试对其进行单元测试以确保它始终有效(而且我'在经历了一段时间的“紧要关头”之后,我拼命地想 catch 单元测试)。

我的保存方法很简单,它是这样工作的:

public Boolean SaveDocument(IDocument document)
{
BinaryFormatter bFormatter = new BinaryFormatter();
FileStream fs = null;

try
{
if (!Directory.Exists(folderName))
Directory.CreateDirectory(folderName);

String path = Path.Combine(Path.Combine(folderName, document.FileName), document.Extension);
using (fs = new FileStream(path, FileMode.OpenOrCreate))
{
bFormatter.Serialize(fs, document);
}
}
catch (IOException ioex)
{
LOG.Write(ioex.Message);
return false;
}

return true;
}

我的测试是:

[Test]
public void can_save_a_document()
{
String testDirectory = "C:\\Test\\";
m_DocumentHandler = new DocumentHandler(testDirectory);

DynamicMock mock = new DynamicMock(typeof(IDocument));

mock.ExpectAndReturn("get_FileName", "Test_File");
mock.ExpectAndReturn("get_Extension", ".TST");

m_DocumentHandler.SaveDocument(mock.MockInstance as IDocument);

try
{
Assert.IsTrue(Directory.Exists(testDirectory), "Directory was not created");
String[] filesInTestDir = Directory.GetFiles(testDirectory);

Assert.AreEqual(1, filesInTestDir.Length, "there is " + filesInTestDir.Length.ToString() + " files in the folder, instead of 1");
Assert.AreEqual(Path.GetFileName(filesInTestDir[0]), "Test_File.TST");
}
finally
{
Directory.Delete(testDirectory);
Assert.IsFalse(Directory.Exists(testDirectory), "folder was not cleaned up");
}
}

我知道序列化接口(interface) preserves the concrete data ,但是模拟接口(interface)会序列化吗?

最佳答案

BinaryFormatter 在序列化数据时使用传入对象的实际类型,而不是接口(interface)。所以当你传递一个真实的对象时,它会在内部写一些类似 Type:MyLib.Objects.MyObj,MyLib 的东西,当你传递一个模拟对象时,它会写类似 Type:Moq.ConcreteProxy,Moq 等的东西。

使用 BinaryFormatter 进行持久化会给您带来麻烦,因为您必须处理版本之间的版本控制和内存布局差异。为文档建立明确定义的格式并手动编写对象和字段会好得多。

关于c# - 模拟接口(interface)仍会序列化为文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com