【发布时间】:2011-02-08 01:40:24
【问题描述】:
我的网络应用程序使用了六个表,当用户通过系统时,每个表都会被填充。为了进行统计分析,我编写了一个数据库视图来将这些表扁平化为一个视图。
视图正在运行,但是,我想围绕视图创建自动化一些测试。
我这样做的想法是为视图创建一个模型/地图和存储库 - 仅使用列表操作。我当前的实现不起作用。
这是我的存储库:
namespace FunctionalTests.SpssView
{
public class SpssRepository
{
private readonly ISessionManager _sessionManager;
public SpssRepository(ISessionManager sessionManager)
{
_sessionManager = sessionManager;
}
public IList<Spss> ListFromSpssView()
{
ICriteria criteria = _sessionManager.GetSession().CreateCriteria(typeof(Spss));
return criteria.List<Spss>();
}
}
}
这是模型类:
namespace FunctionalTests.SpssView
{
public class Spss
{
public virtual String StudentId { get; set; }
public virtual String UPNSCN { get; set; }
...
}
}
还有映射:
namespace FunctionalTests.SpssView
{
public sealed class SpssMap : ClassMap<Spss>
{
public SpssMap()
{
Id(x => x.StudentId).GeneratedBy.Assigned();
Map(x => x.UPNSCN);
...
}
}
}
我对 ID 映射并不完全有信心 - 因为它只是从视图中读取的?
这是我的测试:
[Test]
public void ShouldPopulateAndRetrieveFromSpssView()
{
var mockSessionManager = new Mock<ISessionManager>();
mockSessionManager.Setup(x => x.GetSession()).Returns(_session);
var caseRepository = new CaseRepository(mockSessionManager.Object);
var caseList = caseRepository.ListCases();
Assert.That(caseList.Count, Is.EqualTo(2));
var repository = new SpssRepository(mockSessionManager.Object);
var spssList = repository.ListFromSpssView();
Assert.That(spssList.Count, Is.EqualTo(2));
}
注意案例列表代码 - 我把它放在那里以确保正在建立数据库连接。这部分测试通过了。
运行 select * from spss;返回两个结果。 (我使用的是 sql server 2005 fwiw)
因为这不是生产代码,所以我在我的 FunctionalTests Visual Studio 项目中创建了一个新文件夹(我提到了这一点,因为在我看来它是这个和我的工作存储库之间的主要区别之一。)有所作为??
是否可以像这样测试视图? 无论如何我可以看到正在生成的sql吗? 我做错了什么??!?
谢谢:)
【问题讨论】:
标签: c# orm fluent-nhibernate