- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我以前从未真正做过单元测试,而且我在第一次测试时跌跌撞撞。问题在于 _repository.Golfers.Count();
始终指示 DbSet
为空。
我的测试很简单,我只是想添加一个新的高尔夫球手
[TestClass]
public class GolferUnitTest //: GolferTestBase
{
public MockGolfEntities _repository;
[TestMethod]
public void ShouldAddNewGolferToRepository()
{
_repository = new MockGolfEntities();
_repository.Golfers = new InMemoryDbSet<Golfer>(CreateFakeGolfers());
int count = _repository.Golfers.Count();
_repository.Golfers.Add(_newGolfer);
Assert.IsTrue(_repository.Golfers.Count() == count + 1);
}
private Golfer _newGolfer = new Golfer()
{
Index = 8,
Guid = System.Guid.NewGuid(),
FirstName = "Jonas",
LastName = "Persson"
};
public static IEnumerable<Golfer> CreateFakeGolfers()
{
yield return new Golfer()
{
Index = 1,
FirstName = "Bill",
LastName = "Clinton",
Guid = System.Guid.NewGuid()
};
yield return new Golfer()
{
Index = 2,
FirstName = "Lee",
LastName = "Westwood",
Guid = System.Guid.NewGuid()
};
yield return new Golfer()
{
Index = 3,
FirstName = "Justin",
LastName = "Rose",
Guid = System.Guid.NewGuid()
};
}
我使用 Entity Framework 和代码优先构建了一个数据模型。我已经模拟了 IDbSet 的派生类以测试我的上下文(对网上的人行屈膝礼,我记不清了)
public class InMemoryDbSet<T> : IDbSet<T> where T : class
{
readonly HashSet<T> _set;
readonly IQueryable<T> _queryableSet;
public InMemoryDbSet() : this(Enumerable.Empty<T>()) { }
public InMemoryDbSet(IEnumerable<T> entities)
{
_set = new HashSet<T>();
foreach (var entity in entities)
{
_set.Add(entity);
}
_queryableSet = _set.AsQueryable();
}
public T Add(T entity)
{
_set.Add(entity);
return entity;
}
public int Count(T entity)
{
return _set.Count();
}
// bunch of other methods that I don't want to burden you with
}
当我调试并逐步执行代码时,我可以看到我实例化了 _repository
并用三个假高尔夫球手填充了它,但是当我退出添加函数时,_respoistory。 Golfers
又是空的。当我添加一个新的高尔夫球手时,_set.Add(entity)
运行并添加了高尔夫球手,但 _respoistory.Golfers
还是空的。我在这里错过了什么?
更新
很抱歉我是个白痴,但我没有在我的MockGolfEntities
上下文中实现set
。我没有的原因是我以前尝试过但无法弄清楚如何继续前进并忘记了它。那么,如何设置 IDbSet
?这是我尝试过的方法,但它给了我一个 Stack Overflow 错误。我觉得自己像个白痴,但我不知道如何编写 set 函数。
public class MockGolfEntities : DbContext, IContext
{
public MockGolfEntities() {}
public IDbSet<Golfer> Golfers {
get {
return new InMemoryDbSet<Golfer>();
}
set {
this.Golfers = this.Set<Golfer>();
}
}
}
最佳答案
您不需要实现 get/set,下面的代码应该足以为您生成上下文。
public class MockGolfEntities : DbContext, IContext
{
public MockGolfEntities() {}
public IDbSet<Golfer> Golfers { get; set;}
}
我已经实现了您在原始帖子中的代码,一切似乎对我来说都运行良好 - 您从哪里获得 InMemoryDbSet 的源代码?我正在使用 NuGet package 1.3 ,也许你应该试试那个版本?
关于c# - 使用 Mock IDbSet 对 Entity Framework 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11787968/
我确信这是非常基本的,但我在构建通用方法时遇到了问题。我有无数在我的 DBContext 中声明的接口(interface)类( IDbSet 、 IDbSet 等)。我想将它们传递给处理它们的方法。
有没有办法使用这个答案中描述的方法No FindAsync() method on IDbSet对于 DbContext 的 DbSet 属性? 编辑: 链接的答案包含如何构建从 IDbSet 继承的
我正在尝试在一个新项目中对我的第一个存储库进行单元测试,我们决定在该项目中主要使用 EF6 来处理异步内容。我在为我的模型伪造 IDbSet 并允许在使用新的异步细节之前使用任何 Linq 时遇到问题
public abstract class RepositoryBase : IRepository where T : class { private ShopCoreDbContext d
有什么区别 public IDbSet Chirps { get; set; } 和 public DbSet Chirps { get; set; } 它们一样吗? 最佳答案 Sam I am's
给定一个 IDbSet,其中 Person 包含一个“Id”属性,我如何才能执行以下命令: var p = PersonDbSet.FirstOrDefault(i=>i.Id = 3); 我可以构建
我根本无法让它工作。我的测试中有这段代码: MockRepository repository = new MockRepository(); IDbSet userSet = repository.
FindAsync() 是否有原因? IDbSet 中省略了方法界面? Find是界面的一部分,异步版本不可用似乎很奇怪。我需要转换到 DbSet访问它,这有点麻烦: User user = awai
我正在尝试模拟 System.Data.Entity.IDbSet 以使其返回一些数据(在本例中只是一个空集合): var mock = new Mock>(); mock.Setup(x => x.
我正在尝试模拟 System.Data.Entity.IDbSet 以使其返回一些数据(在本例中只是一个空集合): var mock = new Mock>(); mock.Setup(x => x.
我想使用 IDbSet<> 实现通用存储库模式 Entity Framework 的接口(interface)。 当我问IDbSet时来自 Autofac,它应该解析 IDbContext然后调用它的
我想让 visual studio 创建的 T4 模板将我的实体输出为 IDbset 而不是 DbSet,知道怎么做吗? 最佳答案 我假设您已经有一个生成 DbContext 的 t4 模板.所以只需
我们在单元测试中有一个场景,我们在其中创建了一个实现 IDbSet 的 FakeDbSet。在 FakeUnitOfwork 中,我有一些属性是 IDbSets 并使用 FakeDbSet 进行更新。
我正在尝试基于 MyFinance 创建一个基础存储库类首先使用实体框架代码的示例。我想将其更改为仅使用 Entity Framework 。该示例使用 IDbSet ,但我不知道要将其更改为普通
我以前从未真正做过单元测试,而且我在第一次测试时跌跌撞撞。问题在于 _repository.Golfers.Count(); 始终指示 DbSet 为空。 我的测试很简单,我只是想添加一个新的高尔夫球
我正在尝试模拟实现 IDbSet ,而我恰好在 F# 中这样做。 type MockDbSet(items:seq) = let collection = ResizeArray(items)
在 EF 4.1+ 中,这两行代码之间有区别吗? dbContext.SomeEntitySet.Add(entityInstance); dbContext.Entry(entityInstance
我正在尝试使用Moq对 Entity Framework Code First 类进行一些测试。我对起订量和模拟技术非常陌生,我想知道是否可以轻松地进行我将在下面描述的测试。我在网上搜索了一些解决方案
我正在尝试使用 Moq 框架模拟 IDbSet。单元测试应向现有模拟 DbSet 集合 (SetUp) 添加新记录(实体)并返回新集合的计数。 我的 TestInitialize 设置如下所示: pu
我正在通过实现 IDbSet 接口(interface)来实现 FakeDataSet 类。作为实现此接口(interface)的一部分,我必须实现 Find 方法。我所有的实体类都有一个 Guid
我是一名优秀的程序员,十分优秀!