unit-testing - 如何为 Moq 和 Linq-to-Sql 编写 CRUD 单元测试

标签 unit-testing .net-3.5 moq irepository

我只是参与最小起订量和单元测试,如果这看起来很明显,请原谅我(通过 SO 快速搜索并没有向我显示类似的内容)。

我与以下提议的成员有一个接口(interface):

void AddFeed(Feed feed);

我想为此功能编写一个单元测试。测试类有一个 Moq Repository,声明如下:

static IFeedRepository MockFeedsRepository(params Feed[] feeds)
    {
        var mockFeedsRepository = new Moq.Mock<IFeedRepository>();
        mockFeedsRepository.Expect(x => x.Feeds).Returns((feeds.AsQueryable));

        return mockFeedsRepository.Object;
    }

应该如何修改模拟存储库声明以包含这种新的所需行为,或者我应该创建一个不同的最小起订量(以及如何完成)。

我的假设是,在创建模拟之后,派生单元测试会容易得多,但非常感谢提示。

非常感谢,

KevDog

最佳答案

我还假设您会像这样使用 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 接口(interface)交互。

如果您想测试 IFeedRepository 接口(interface)的使用情况,那么只需执行一些简单的操作,例如

[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

希望对你有帮助

关于unit-testing - 如何为 Moq 和 Linq-to-Sql 编写 CRUD 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/528689/

相关文章:

r - 获取 R 文件而不运行它(单元测试)

c# - xamarin 中的 NUnit 错误

android - Robolectric:Resources$NotFoundException:带有 Android Gradle 插件 3 的字符串资源 ID

c# - VBA 中的 VSTO : AddIn. 对象有时返回 Nothing (null)

c# - 如何使用 Moq 和 C# 模拟 SingleOrDefault()

java - openPojo 未获取参数化构造函数

c# - 使用多线程 for 循环

asp.net - 为什么 ASP.NET 尝试为 Web 服务引用生成临时类?

c# - 有没有办法按值复制 Moq Mock<>?

unit-testing - 单元测试领域对象