Unit testing 用于单元测试的内存文件
我想为打印到标准输出的方法编写一个单元测试。 我已经更改了代码,因此它将打印到传入的Unit testing 用于单元测试的内存文件,unit-testing,mocking,d,Unit Testing,Mocking,D,我想为打印到标准输出的方法编写一个单元测试。 我已经更改了代码,因此它将打印到传入的文件实例,而默认情况下,该实例是stdout。我唯一缺少的是一些可以传入的内存文件实例。有这样的事吗?有什么建议吗?我希望这样的事情能奏效: import std.stdio; void greet(File f = stdout) { f.writeln("hello!"); } unittest { greet(inmemory); assert(inmemory.content
文件
实例,而默认情况下,该实例是stdout
。我唯一缺少的是一些可以传入的内存文件实例。有这样的事吗?有什么建议吗?我希望这样的事情能奏效:
import std.stdio;
void greet(File f = stdout) {
f.writeln("hello!");
}
unittest {
greet(inmemory);
assert(inmemory.content == "hello!\n")
}
void main() {
greet();
}
打印到标准输出的单元测试代码的任何其他方法
?而不是依赖相当低级的文件
,通过接口传递对象
正如您在评论中所提到的那样,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")
}
这需要跨平台吗?不需要;例如,不同平台上的新线可能不同。我不想测试这方面,只想测试可打印的内容。因此,我需要Java中类似于OutputStreamWriter
的东西,而不是File
,也就是说,我将停留在unicode字符的级别,而不是编码、文件系统等。如果我的测试在所有平台上运行,那将是非常好的…谢谢!我希望标准图书馆也能提供类似的设施。或者一些模拟工具来避免“生产”代码中的样板文件。这种方式writeln的所有功能都不适用于生产代码。这里有许多可用的单元测试库:我编写的一个包含模拟功能。谢谢我开始找。。。当然,我更喜欢没有外部依赖的东西。。现在我只跳过这部分的单元测试。:)