我对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();
}
}
答案 0 :(得分:1)
我不知道你为什么使用Moq?您自己实现了所有代码,并希望看到它按预期工作。只需使用您编写的代码,无需Moq。
Moq是一个库,当您没有(或想要使用)实际实现时使用,只想查看调用哪些方法和/或控制方法返回的内容,以便您可以测试来电者。
因此,在您的情况下,如果您想要在某个场景中看到Add被调用,或者想要测试Add抛出异常会发生什么,那么您将创建Repo的Mock。