Dot-Net

如何起訂量功能

  • February 21, 2012

嘗試對建構子採用 Func 的類進行單元測試。不知道如何使用 Moq 模擬它。

public class FooBar
{
   public FooBar(Func<IFooBarProxy> fooBarProxyFactory)
   {
       _fooBarProxyFactory = fooBarProxyFactory;
   }
}



[Test]
public void A_Unit_Test()
{
   var nope = new Mock<Func<IFooBarProxy>>();
   var nope2 = new Func<Mock<IFooBarProxy>>();

   var fooBar = new FooBar(nope.Object);
   var fooBar2 = new FooBar(nope2.Object);

   // what's the syntax???
}

弄清楚了

public interface IFooBarProxy
{
   int DoProxyStuff();
}

public class FooBar
{
   private Func<IFooBarProxy> _fooBarProxyFactory;

   public FooBar(Func<IFooBarProxy> fooBarProxyFactory)
   {
       _fooBarProxyFactory = fooBarProxyFactory;
   }

   public int DoStuff()
   {
       var newProxy = _fooBarProxyFactory();
       return newProxy.DoProxyStuff();
   }
}

[TestFixture]
public class Fixture
{
   [Test]
   public void A_Unit_Test()
   {
       Func<IFooBarProxy> funcFooBarProxy = () =>
       {
           var mock = new Mock<IFooBarProxy>();
           mock.Setup(x => x.DoProxyStuff()).Returns(2);
           return mock.Object;
       };
       var fooBar = new FooBar(funcFooBarProxy);

       var result = fooBar.DoStuff();
       Assert.AreEqual(2, result);
   }
}

引用自:https://stackoverflow.com/questions/6036708