Db4o数据库用于自动测试

时间:2012-10-24 17:37:55

标签: c# unit-testing db4o

我们在项目中使用Db4o。

我有一些自动测试,其中测试对象的持久性。 问题是,我无法打开/创建数据库两次。 我有两个辅助方法来设置对象容器。但是当第二次调用该方法时,“ArgumentException:Configuration已经使用过”。被扔了。我关闭并处理了以前的物品容器。

我做错了什么?

CODE:

public static IObjectContainer GetEmptyTestingDatabase() {
    var tempDir = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
    string dbFilePath = Path.Combine(tempDir, "UNIT-TESTING.db4o");
    if (File.Exists(dbFilePath)) {
        File.Delete(dbFilePath);
    }

    var cfg = Db4oFactory.Configure();
    cfg.Add(new TransparentPersistenceSupport(new DeactivatingRollbackStrategy()));
    cfg.Add(new TransparentActivationSupport());

    var db = Db4oFactory.OpenFile(cfg, dbFilePath);
    return db;
}
public static IObjectContainer GetMemoryDatabase() {
    string dbFileName = Guid.NewGuid().ToString().ToString();

    var cfg = Db4oFactory.Configure();
    cfg.Storage = new Db4objects.Db4o.IO.PagingMemoryStorage();
    cfg.Add(new TransparentPersistenceSupport(new DeactivatingRollbackStrategy()));
    cfg.Add(new TransparentActivationSupport());

    var db = Db4oFactory.OpenFile(cfg, dbFileName);
    return db;
}

1 个答案:

答案 0 :(得分:1)

您正在使用已弃用的db4o方法。问题是Db4oFactory.Configure()返回一个静态配置对象;这种方法只是为了向后兼容。

如果您使用的是较新的db4o版本,请改用Db4oEmbedded.NewConfiguration()。否则(如果你真的需要坚持使用旧的db4o版本)使用Db4oFactory.NewConfiguration()也应该有效。