首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟混凝土FileInfo对象

模拟混凝土FileInfo对象
EN

Stack Overflow用户
提问于 2012-04-16 15:47:06
回答 3查看 4.1K关注 0票数 4

我想模拟System.IO.FileInfo.Extension方法并让它返回".xls“,但是我什么都不能做

这个例子对删除很有用,但对扩展不起作用(代码不会编译)

代码语言:javascript
复制
  [ClassInitialize]
      public static void Initialize(TestContext context)
      {
         Mock.Partial<FileInfo>().For((x) => x.Extension);
      }

我也尝试过使用这个示例,但是代码是错误的。

  • 我有一份完全授权的JustMock拷贝
  • 我正在使用VS 2010 .net 4.0

编辑:我知道我可以通过这种方式设置一个接口并进行测试,但是付费版本JustMock应该模拟具体的类。既然我付了钱,我想知道该怎么做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-17 17:16:34

最新发布的JustMock (Q2,2012年)。您不再需要MockClassAtriibute来模拟MsCrolib成员。

您可以通过以下方式编写上面的测试:

代码语言:javascript
复制
[TestClass]
public class UnitTest1
{
        [ClassInitialize]
        public static void Init(TestContext context)
        {
            Mock.Replace<FileInfo, string>(x=> x.Extension).In<UnitTest1>();
        }


       [TestMethod]
       public void ShouldAssertFileInfoExtension()
       {
           var fileInfo = Mock.Create<FileInfo>(Constructor.Mocked);

           string expected = "test";

           Mock.Arrange(() => fileInfo.Extension).Returns(expected);

           Assert.AreEqual(fileInfo.Extension, expected);
       }
}
票数 1
EN

Stack Overflow用户

发布于 2012-04-16 15:55:24

在我看来,您只需要将依赖关系抽象到另一个包装类中,那么就很容易模拟了。

代码语言:javascript
复制
 public class FileInfoAbstraction
 {
      protected FileInfo _fileInfo = null;

      public virtual string Extension
      {
          get { return _fileInfo.Extension; }
      }

      public FileInfoAbstraction(string path)
      {
          _fileInfo = new FileInfo(path);
      }
 }

然后,无论您在何处使用FileInfo类,插入您的抽象:

代码语言:javascript
复制
 var myFileInfo = new FileInfoAbstraction(somePath);

因为扩展现在被标记为虚拟的,所以大多数模拟框架将能够修改它。

票数 1
EN

Stack Overflow用户

发布于 2012-04-18 13:02:38

我想我错过了一个属性

代码语言:javascript
复制
[TestClass, MockClass] // **MockClass Added**
public class UnitTest1
{
        [ClassInitialize]
        public static void Init(TestContext context)
        {
             Mock.Partial<FileInfo>().For<FileInfo, string>(x => x.Extension);
        }


       [TestMethod]
       public void ShouldAssertFileInfoExtension()
       {
           var fileInfo = Mock.Create<FileInfo>(Constructor.Mocked);

           string expected = "test";

           Mock.Arrange(() => fileInfo.Extension).Returns(expected);

           Assert.AreEqual(fileInfo.Extension, expected);
       }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10177363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档