我们有保存文件的代码,我想在测试过程中检查文件的内容。 不过,我觉得,这样的情景将最好的,如果我的抽象的文件持久性操作下面的接口实现:测试基于持久性的文件
public interface IFilePersist
{
void Save(XXX, FileLocation);
}
在单元测试中,我将注入,将检查内容,并在生产中的界面将实际模拟坚持正确的位置。
这是开销吗?这种做法是否常用? 对于数据库相关的操作,这种操作是微不足道的,并且一直使用。
我们有保存文件的代码,我想在测试过程中检查文件的内容。 不过,我觉得,这样的情景将最好的,如果我的抽象的文件持久性操作下面的接口实现:测试基于持久性的文件
public interface IFilePersist
{
void Save(XXX, FileLocation);
}
在单元测试中,我将注入,将检查内容,并在生产中的界面将实际模拟坚持正确的位置。
这是开销吗?这种做法是否常用? 对于数据库相关的操作,这种操作是微不足道的,并且一直使用。
是的,这是一种方法,如果你想减少创建一个跟踪模拟对象的开销,你也可以做一个局部重写的方法,如果可能的话。我不知道你使用的是什么语言,但在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!”。
是的,将单元测试与文件系统隔离是很好的做法。首先是因为文件系统访问比内存访问慢。然后可以遇到其他问题(权限,缺少路径,FS已满或未装入...)。
文件系统上的真实持久性应通过集成测试进行测试。