C# 如何使用moq模拟System.Net.Mail.Attachment?

C# 如何使用moq模拟System.Net.Mail.Attachment?,c#,unit-testing,moq,C#,Unit Testing,Moq,我想为以下代码段编写一个单元测试: var attachment = new Attachment(path) { ContentId = Path.GetFileName(path) }; return attachment; 不幸的是,如果我在单元测试代码中使用假路径调用该ctor,附件ctor将抛出FileNotFoundException 如何模拟此代码以验证ContentId属性是否设置正确?我不想测试框架代码。您不必为此使用Moq,只需使用附件类的构造函数,提供您从测试项目

我想为以下代码段编写一个单元测试:

var attachment = new Attachment(path)
{
   ContentId = Path.GetFileName(path)
};

return attachment;
不幸的是,如果我在单元测试代码中使用假路径调用该ctor,附件ctor将抛出FileNotFoundException


如何模拟此代码以验证ContentId属性是否设置正确?我不想测试框架代码。

您不必为此使用Moq,只需使用附件类的构造函数,提供您从测试项目的资源中获得的流以及匹配的ContentType。例如,您可以向资源中添加一些文本文件并指定MIME类型。

这是整个测试还是将此附件注入到要测试的另一个模块中?因为您真的不需要测试.Net Framework代码,只需要测试您自己的代码。我知道他想在被测试的代码完成后测试附件的状态。ContentId。@galenus:没错-我想测试附件的状态。ContentId@JMK:谢谢你的回答。是的,这是整个测试。我想这并不是你想要模仿的附件,实际上是文件系统本身,有一些很好的答案。谢谢你的回答-是的,这是一种方式。但遗憾的是,由于可测试性,我必须调用另一个ctor。您认为呢?您可以将任何框架类型封装在自己的框架中,使其适应您的需要、附件类等。您的包装器可以具有所有虚拟方法,也可以实现一个接口,这两种解决方案都是可模拟的,从而使测试更容易。但你必须决定最务实的方式来实现最终结果。所以我不认为你目前的解决方案是不可接受的。