我们在 EntityFramework 6 之上使用 SharpRepository,到目前为止效果很好。我们还在实施完整的单元测试,在研究使用 SharpRepository 进行单元测试的批准方法是使用 CacheRepository 时,这让我们可以使用一致的测试数据填充存储库,然后针对这些测试存储库测试服务和模型。这在大多数情况下也有效。
问题
我们已经使用单个对象成功填充了这些存储库,然后我们可以将该对象拉出并对其进行测试。但是一个新的测试用例要求我们针对多个条目进行测试,当我们添加它们时,只有最后一个条目实际上在 Repo 中可用。我从单元测试输出中看到了这一点,并且在调试时在监视窗口中检查了 repo,它只有一个。我已经设置了标准缓存策略和内存提供程序,我还尝试使用 Add 函数单独添加每个对象并作为列表添加。
编码
设置
[TestInitialize]
public void Initialize()
{
var sharpRepositoryConfiguration = new SharpRepositoryConfiguration();
sharpRepositoryConfiguration.AddCachingStrategy(new StandardCachingStrategyConfiguration("standard"));
sharpRepositoryConfiguration.AddCachingProvider(new InMemoryCachingProviderConfiguration("inmemory"));
sharpRepositoryConfiguration.AddRepository(new CacheRepositoryConfiguration("textFilter", "TextFilter", "standard", "inmemory"));
textFilterRepo = sharpRepositoryConfiguration.GetInstance<TextFilter, int>("textFilter");
}
[TestCleanup]
public void CleanUp()
{
textFilterRepo.Delete(c => true);
}
这些方法只能分别在每个测试方法之前和之后调用,因此不会在方法本身内部引起问题。
添加
List<TextFilter> badwords;
var badword1= new TextFilter
{
ID = 0,
FilterType = 1,
FilterText = "badword1",
DateTimeCreated = DateTime.Now
};
var badword2 = new TextFilter
{
ID = 1,
FilterType = 1,
FilterText = "badword2",
DateTimeCreated = DateTime.Now
};
var badword3 = new TextFilter
{
ID = 2,
FilterType = 1,
FilterText = "badword3",
DateTimeCreated = DateTime.Now
};
badwords = new List<TextFilter>
{
badword1,
badword2,
badword3
};
textFilterRepo.Add(badwords);
正如我之前所说,我已经尝试了单独的添加调用和现在的列表,结果相同。
编辑: 我不确定为什么将 CacheUsed 设置为 false,我没有针对这些设置的其他设置,但我想知道这是否是问题的一部分,以及我是否需要明确调用某些东西才能使其正常工作。
研究
我对此进行了相当广泛的研究,包括一般的 Sharp Repository 和专门的单元测试。
我已经看到了这个 SO,这导致我使用了 CacheRepository,如何为 SharpRepository 的 InMemoryRepository 播种?. 但我无法找到有关此信息的任何信息。可能是我错误地设置了存储库的缓存,但这就是我看到的示例中通常的样子。我已经在许多单元测试中成功地使用了它,但之前不必填充多个值。
要求
我正在寻找帮助来确定为什么此设置无法将多个对象添加到它的缓存中,以及我如何更改此代码,或者我的单元测试设置通常能够在我的 CacheRepository 中容纳多个对象。