我还假设您会像这样使用AddFeed方法
Feed myNewFeed = new Feed();
feedRepository.Add(myNewFeed);
而且你没有像这样使用它(这是糟糕的设计)
IFeedRepository feedRepository = new FeedRepository();
Feed myNewFeed = new Feed(feedRepository);
...
myNewFeed.Save();
[Test]
public void TheTest()
{
IFeedRepository repository = MockFeedsRepository({feed1, feed2, feed3});
Feed newFeed = new Feed();
repository.Add(newFeed);
Assert.AreEqual(4,repository.Count());
}
如果是这种情况,那么测试实际上并不是在测试除内存中模拟存储库的实现之外的任何东西。这就是你真正需要做的吗?
我建议您要做的是测试存储库的L2Sql实现,或者测试类如何与IFeedRepository接口交互。
如果您想测试IFeedRepository接口的使用情况,那么只需执行以下简单操作
[Test]
public void TheTest()
{
IFeedRepository repository = Moq.Mock<IFeedRepository>();
Feed newFeed = new Feed();
repository.Expect(r => r.Add(newFeed)); //no return as it's a void method
//repository.Expect(r => r.Add(newFeed)).Throws(new ApplicationException()); --Test handing of exceptions
//Code to hit the .Add() method
//Assert the Add method was called.
}
有关断言是否调用了方法的提示,请参阅
Using Moq to determine if a method is called