我喜欢的一件事 Rails'和 Django's测试方法是他们支持在每个测试运行之前使用固定装置来设置数据库。
过去,我使用严格的单元测试结合模拟存储库来测试我的代码,但我希望有一些像上述测试方法一样易于使用的东西来进行集成测试。
我听过一些关于代码优先和 EF 5 的此类支持的讨论,但我不知道它是否会上升到 Rails 和 Django 提供的水平。
肯定有类似的东西。 任何信息将不胜感激!
最佳答案
在 EF5 中引入了新概念,称为迁移。您可能曾经在 Rails 或 Django 应用程序中使用过类似的东西。
Migration是一个类,它有几个函数来升级/降级DB的版本。
public partial class VoteTime : DbMigration
{
public override void Up()
{
AddColumn("Votes", "Time", c => c.DateTime(nullable:false, defaultValue:DateTime.UtcNow));
}
public override void Down()
{
DropColumn("Votes", "Time");
}
}
您还必须设置 DbContext 和 DbMigrationsConfiguration 配置类以允许代码优先方法工作。
出于测试目的,您需要引入 TestDatabaseInitilizer
public class TestDatabaseInitilizer : DropCreateDatabaseAlways<DbContext>
{
}
它将负责为单元测试初始化测试数据库。
最后,您应该设计测试代码来设置上下文。
public class SomeRepositoryTests
{
private DbContext _context;
[SetUp]
public void Setup()
{
Database.SetInitializer(new TestDatabaseInitilizer());
_context = new DbContext("TestContext");
_repository = new SomeRepository(_context);
}
[Test]
public void should_return_some_entities()
{
Assert.That(_repository.Get(), Is.Not.Null);
}
}
如果需要,可以将设置代码移至基类。
关于c# - 使用固定装置测试 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11320421/