测试基于文件的持久性

时间:2009-10-28 18:49:57

标签: unit-testing tdd persistence

我们有持久保存文件的代码,我想在测试期间检查文件的内容。 我认为,如果我将文件持久性操作抽象到以下接口,那么这种情况最好实现:

public interface IFilePersist
{
   void Save(XXX, FileLocation);
}

在单元测试中,我将注入将检查内容的模拟,并且在生产中,接口实际上将保持在正确的位置。

是开销吗?这种做法常用吗? 对于DB相关的操作,这种操作很简单并且总是使用。

2 个答案:

答案 0 :(得分:1)

是的,这是一种方法,如果你想减少创建跟踪模拟对象的开销,你也可以在可能的情况下对方法进行局部覆盖。我不知道你正在使用什么语言,但在Java中,本地覆盖将如下所示:

// actual class
public class SomeClass {
    public void method() {
        System.out.println("Hello!");
    }
}

// creating the class in test

SomeClass c = new SomeClass() {
public void method() {
        System.out.println("Hi!");
    }       
};

现在你的班级实际打印“嗨!”调用m()时,因为它在匿名内部类中被覆盖,而实际生产类仍然保持打印“Hello!”。

答案 1 :(得分:1)

是的,保持单元测试与文件系统隔离是件好事。首先是因为文件系统访问比内存访问慢。然后可能会遇到其他问题(权限,丢失路径,FS已满或未安装......)。

文件系统上的真正持久性应使用集成测试进行测试。