我目前对如何嘲笑感到困惑.
我正在使用Moq.为了模拟对象,我通常以这种方式编写
var mockIRepo = new Mock<IRepo>();
Run Code Online (Sandbox Code Playgroud)
但是,我需要为我的设置创建模拟对象.
Option1 以这种方式模拟仅包含属性的对象是否更好?
var object = Mock.Of<Object>()
Run Code Online (Sandbox Code Playgroud)
Option2 或者这样
var object = new Mock<Object>()
Run Code Online (Sandbox Code Playgroud)
我已经读过选项2有setupproperties这对我来说有点问题,因为我也可以在选项1中设置属性.
那有什么区别?或者,还有更好的方法?
我在我的应用程序中使用DbContext(EF6)设置了典型的存储库模式:
public class MyDbContext : EFContext<MyDbContext> {
public MyDbContext () { }
public virtual DbSet<CartItem> Cart { get; set; }
Run Code Online (Sandbox Code Playgroud)
和一个存储库:
public class GenericEFRepository<TEntity, TContext>
where TEntity : class, new()
where TContext : EFContext<TContext> {
private readonly TContext _context;
public GenericEFRepository(TContext context) {
_context = context;
}
//...
public virtual TEntity Insert(TEntity item) {
return _context.Set<TEntity>().Add(item);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Moq 4.2(遵循本教程)通过创建模拟上下文来测试它:
// Arrange
var mockSet = new Mock<DbSet<CartItem>>();
var mockContext = new Mock<MyDbContext>();
mockContext.Setup(c => c.Cart).Returns(mockSet.Object);
// Act …Run Code Online (Sandbox Code Playgroud) 我正在尝试提出一种场景,其中应该使用严格的模拟。我想不到。
您何时使用严格的模拟,为什么?