我们有持久保存文件的代码,我想在测试期间检查文件的内容。 我认为,如果我将文件持久性操作抽象到以下接口,那么这种情况最好实现:
public interface IFilePersist
{
void Save(XXX, FileLocation);
}
在单元测试中,我将注入将检查内容的模拟,并且在生产中,接口实际上将保持在正确的位置。
是开销吗?这种做法常用吗? 对于DB相关的操作,这种操作很简单并且总是使用。
答案 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已满或未安装......)。
文件系统上的真正持久性应使用集成测试进行测试。