我有一个测试,我希望失败,但它没有:
[TestMethod]
public void FillListOfSecurityExchangesRepository()
{
var qry = new SecurityExchangeQueryContext
{
QueryType = SecurityExchangeQueryType.FillAllWithMarketsAndStocks
};
using (var ctx = new EquitiesDbContext())
{
var r = new SecurityExchangeRepository(ctx);
r.Read(qry);
r.Dispose();
}
Assert.IsTrue(qry.Exchanges.Count > 0);
}
我希望这会失败,因为在存储库中我没有在查询上调用ToList,然后在返回时我调用Dispose of context。
(我实际上在上面的代码中冗余地调用了两次,因为它没有失败,只有r.Dispose()反过来处理上下文。)
以下是存储库调用的Read方法:
protected virtual void FillAllWithMarketsAndStocks(SecurityExchangeQueryContext qctx)
{
this.Fill(() => qctx.Exchanges.AddRange(this.DbSet.OrderBy(exch => exch.Name).Include("StockMarkets.Stocks")),
"void FillAllWithMarketsAndStocks(SecurityExchangeQueryContext qctx) failed.");
}
(有一些用抽象类抽象出来但没有任何影响上下文的东西。)
由于我在没有ToList的情况下调用this.DbSet.OrderBy,因此每个Exchange仍必须引用上下文的DbSet Exchange。
所以我预计它会失败,因为在TestMethod中我没有做Assert / Count直到我处理了Context但它继续通过。使用Watch我可以看到Context仍然存在并且即使在退出using块之后也会踢。我也可以访问Exchange的属性,因此它不仅仅是Collection中的随机blob。
var sm = qry.Exchanges[0].StockMarkets.First();