4

System.IO.FileInfo.Extensionメソッドをモックして、「。xls」を返すようにしたいのですが、何も機能しません。

この例は、削除には適していますが、拡張には適していません(コードはコンパイルされません)

  [ClassInitialize]
      public static void Initialize(TestContext context)
      {
         Mock.Partial<FileInfo>().For((x) => x.Extension);
      }

私もこのを使ってみましたが、コードが間違っています。

  • JustMockの完全にライセンスされたコピーを持っています
  • VS 2010.net4.0を使用しています

編集:インターフェースをセットアップしてそのようにテストできることは知っていますが、有料版のJustMockは具象クラスをモックすることになっています。お金を払ったので、その方法を知りたいです。

4

3 に答える 3

1

その依存関係を別のラッパークラスに抽象化する必要があるように思えます。そうすれば、モックを作成するのは簡単です。

 public class FileInfoAbstraction
 {
      protected FileInfo _fileInfo = null;

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

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

次に、FileInfoクラスを使用していた場所に、抽象化を挿入します。

 var myFileInfo = new FileInfoAbstraction(somePath);

拡張機能は現在仮想としてマークされているため、ほとんどのモックフレームワークはそれを変更できます。

于 2012-04-16T15:55:24.133 に答える
1

属性が欠けていたと思います

[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);
       }

}
于 2012-04-18T13:02:38.150 に答える
1

JustMockの最新リリース(2012年第2四半期)。MsCrolibメンバーをモックするためのMockClassAtriibuteはもう必要ありません。

上記のテストは、次の方法で非常に書くことができます。

[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);
       }
}
于 2012-07-17T17:16:34.873 に答える