使用起订量等的好处

Ant*_*yrd 4 .net unit-testing moq repository

我遇到过一些使用 Moq 进行单元测试的参考。但是在查看了 moq 的 wiki 示例之后,我真的看不出比创建模拟存储库有什么好处。我错过了什么吗?下面是我创建的模拟存储库的示例。最小起订量可以以任何方式优化吗?

    namespace Models
    {
        public class MockImagesRepository : IImagesRepository
        {
            private readonly BlogContext _context;
            private readonly List<ImageViewModel> _imageViewModels;

            public MockImagesRepository()
            {
                _context = new BlogContext();
                _imageViewModels = new List<ImageViewModel>();
                for (var i = 0; i < 10; i++)
                {
                    _imageViewModels.Add(new ImageViewModel
                                             {
                                                 Id = i,
                                                 AlternateText = "AlternateText " + i,
                                                 Description = "Description " + i,
                                                 Name = "Name " + i,
                                             });
                }
                for (var i = 10; i < 20; i++)
                {
                    _imageViewModels.Add(new ImageViewModel
                                             {
                                                 Id = i,
                                                 AlternateText = "AlternateText " + i,
                                                 Description = "Description " + i,
                                                 Name = "Name " + i,
                                             });
                }
                for (var i = 20; i < 30; i++)
                {
                    _imageViewModels.Add(new ImageViewModel
                                             {
                                                 Id = i,
                                                 AlternateText = "AlternateText " + i,
                                                 Description = "Description " + i,
                                                 Name = "Name " + i,
                                             });
                }

            }

            public int GetCount()
            {
                return _imageViewModels.Count;
            }

            public IEnumerable<ImageViewModel> FindRange(string format, int i, int recordsCount)
            {
                return _imageViewModels.Skip(i).Take(recordsCount);
            }

            public void Add(Image image)
            {
            }

            public IEnumerable<Image> GetImages()
            {
                var images = new List<Image>();
                foreach (var imageViewModel in _imageViewModels)
                {
                    images.Add(new Image(imageViewModel));
                }
                return images;
            }

            #region Implementation of IDisposable

            public void Dispose()
            {
                _context.Dispose();
            }

            #endregion


 }
}
Run Code Online (Sandbox Code Playgroud)

Gil*_*les 5

使用 Moq,您无需手动创建模拟对象。仅此一项就可以节省您的时间。

您将设置 Moq 来告诉它如何根据事物的调用内容/方式进行行为,而不是手动创建这些模拟对象。

使用这种方法,您将能够执行以下操作:

  • 根据不同的输入设置各种响应或无论输入如何都提供相同的结果(使用设置)

  • 允许您通过提交参数的所有值来简化测试代码(使用 It.IsAny<> 或 It.Is<>)

  • 验证方法已被调用的次数,或者是否已被调用。(使用验证)。这将允许您测试某些依赖项是否已使用正确的参数调用了定义的次数。

  • 设置或验证代码是否会抛出特定异常(使用 Throws)

当您掌握 Moq 时,对于中等复杂的测试用例,您将看到编写测试用例的收益。

当然,您可以手动完成所有这些事情,但是在模拟中编写这些功能将非常耗时。