用于单元测试的内存文件
In-memory File for unittesting
我想为打印到标准输出的方法编写单元测试。
我已经更改了代码,因此它打印到传入的 File
实例,而不是默认情况下的 stdout
。我唯一缺少的是一些我可以传入的内存中 File
实例。有这样的事吗?有什么推荐吗?我希望这样的事情有效:
import std.stdio;
void greet(File f = stdout) {
f.writeln("hello!");
}
unittest {
greet(inmemory);
assert(inmemory.content == "hello!\n")
}
void main() {
greet();
}
任何其他单元测试代码打印到 stdout
的方法?
与其依赖相当低级的 File
,不如通过接口传入对象。
正如您在评论中提到的那样,Java 中的 OutputStreamWriter
是许多接口的包装器,旨在作为字节流等的抽象。我会做同样的事情:
interface OutputWriter {
public void writeln(string line);
public string @property content();
// etc.
}
class YourFile : OutputWriter {
// handle a File.
}
void greet(ref OutputWriter output) {
output.writeln("hello!");
}
unittest {
class FakeFile : OutputWriter {
// mock the file using an array.
}
auto mock = new FakeFile();
greet(inmemory);
assert(inmemory.content == "hello!\n")
}
我想为打印到标准输出的方法编写单元测试。
我已经更改了代码,因此它打印到传入的 File
实例,而不是默认情况下的 stdout
。我唯一缺少的是一些我可以传入的内存中 File
实例。有这样的事吗?有什么推荐吗?我希望这样的事情有效:
import std.stdio;
void greet(File f = stdout) {
f.writeln("hello!");
}
unittest {
greet(inmemory);
assert(inmemory.content == "hello!\n")
}
void main() {
greet();
}
任何其他单元测试代码打印到 stdout
的方法?
与其依赖相当低级的 File
,不如通过接口传入对象。
正如您在评论中提到的那样,Java 中的 OutputStreamWriter
是许多接口的包装器,旨在作为字节流等的抽象。我会做同样的事情:
interface OutputWriter {
public void writeln(string line);
public string @property content();
// etc.
}
class YourFile : OutputWriter {
// handle a File.
}
void greet(ref OutputWriter output) {
output.writeln("hello!");
}
unittest {
class FakeFile : OutputWriter {
// mock the file using an array.
}
auto mock = new FakeFile();
greet(inmemory);
assert(inmemory.content == "hello!\n")
}