如何使用Moq从服务层/存储库中检索结果?

时间:2015-01-17 10:29:55

标签: c# service repository moq

我对Moq有点问题。我创建了一个假的服务类库,因此我可以告诉你我在哪里遇到问题。

如果你看到下面我在我的存储库中只有Add()GetAllStrings()方法,它们在FakeService类中用于执行AddFakeThings()和{{ 1}})。问题是,当我使用服务类在我的存储库中添加字符串时,服务类的列表不会增加,所以我永远无法测试是否在内部添加了项目。

为什么?

我见过人们用里面的数据创建虚假存储库的解决方案,但这对于测试企业解决方案来说太麻烦了,还有其他办法吗?

GetallTheFakeThings(

// ##这就是我正在测试的...结果应该是3或1,因为我在Repo中添加3个字符串或者使用服务添加1个字符串并且它们为空

//## Interface for Fake Repository    

public interface IFakeRepo
{
        void Add(string something);
        IList<string> GetAllStrings();
}


//## Fake Repository

public class FakeRepo:IFakeRepo
{
        private List<string> mylist;
        public FakeRepo()
        {
            mylist = new List<string>();
        }
        public void Add(string something)
        {
            mylist.Add(something);
        }
        public IList<string> GetAllStrings()
        {
            return mylist;
        }
}

//## Interface for the Fake Service

public interface IFakeService
{
        void AddAFakeThing(string thing);
        IList<string> GetAllTheFakeThings();       
}

//## Fake Service

public class FakeService: IFakeService
{ 
         private IFakeRepo _fakerepo;
         public FakeService(IFakeRepo fakerepo)
         {
             _fakerepo = fakerepo;
         }
         public void AddAFakeThing(string thing)
         {
             _fakerepo.Add(thing);
         }
         public IList<string> GetAllTheFakeThings()
         {
            return _fakerepo.GetAllStrings();
         }
}

1 个答案:

答案 0 :(得分:1)

我不知道你为什么使用Moq?您自己实现了所有代码,并希望看到它按预期工作。只需使用您编写的代码,无需Moq。

Moq是一个库,当您没有(或想要使用)实际实现时使用,只想查看调用哪些方法和/或控制方法返回的内容,以便您可以测试来电者。

因此,在您的情况下,如果您想要在某个场景中看到Add被调用,或者想要测试Add抛出异常会发生什么,那么您将创建Repo的Mock。