【发布时间】:2013-09-17 14:19:01
【问题描述】:
这是我的测试:
[TestMethod]
public void TestUnitOfWork()
{
UnitOfWork unitOfWork = new UnitOfWork();
unitOfWork.ContactRepository.Insert(new Contact
{
Id = Guid.NewGuid(),
FirstName = "Dom",
LastName = "A",
Email = "dominicarchual@yahoo.com"
});
var contacts = unitOfWork.ContactRepository.Get(x => x.FirstName == "Dominic");
Assert.AreEqual(1, contacts.Count());
}
我得到的错误是:
测试方法 MvcContacts.Tests.Controllers.HomeControllerTest.TestUnitOfWork 抛出 异常:System.Data.ProviderIncompatibleException:错误 从数据库获取提供者信息时发生。这 可能是由 Entity Framework 使用不正确的连接引起的 细绳。检查内部异常以获取详细信息并确保 连接字符串是正确的。 ---> System.Data.ProviderIncompatibleException:提供者未返回 ProviderManifestToken 字符串。 ---> System.Data.SqlClient.SqlException:网络相关或 建立连接时发生特定于实例的错误 SQL 服务器。服务器未找到或无法访问。核实 实例名称正确且 SQL Server 配置为 允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/指定实例时出错)
我没有设置任何数据库;即我的上下文如下所示:
namespace MvcContacts.DAL
{
public class ContactsContext : DbContext
{
public DbSet<Contact> Contacts { get; set; }
}
}
我不知道如何将它映射到我的数据库;但是,我认为我不必这样做,因为我只是想使用模拟数据进行测试。我错了吗?
E1:这是我的工作单元。
namespace MvcContacts.DAL
{
public class UnitOfWork : IDisposable
{
private ContactsContext context = new ContactsContext();
private GenericRepository<Contact> contactRepository;
public GenericRepository<Contact> ContactRepository
{
get
{
if (this.contactRepository == null)
{
this.contactRepository = new GenericRepository<Contact>(context);
}
return contactRepository;
}
}
public void Save()
{
context.SaveChanges();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
context.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}
【问题讨论】:
-
请发布 UnitOfWork 的实现。看来您正在使用真正的实现而不是模拟一个
-
@PavelMurygin 我假设你的意思是定义?因为,实现在测试中是正确的(应该是,不是吗?)。
标签: c# asp.net-mvc unit-testing unit-of-work