我正在寻找Dart编程语言中的一种方法来重定向 从stdout输出到一个“东西”,我可以调用.toString()并获取 在标准输出上打印为String的任何内容。这对单元测试很有用。
当前,我将stdout包装在Display类中,并存储一个调用的文本,并验证stdout的写入是否为 用过的。另请参阅下面的我的旁注:如何用Java完成。
import 'dart:io';
import 'package:mockito/mockito.dart';
import 'package:test/test.dart';
class Display {
IOSink output;
String lastTextPrinted;
Display(IOSink output) {
this.output = output;
}
void myPrint(String text) {
lastTextPrinted = text;
output.write(text);
}
}
main() {
test('prints hello world', () {
Display display = new Display(stdout);
display.myPrint("Hello world!");
expect("Hello world!", display.lastTextPrinted);
});
test('myPrint calls ioSinks write', () {
MockIOSink ioSink = new MockIOSink();
Display display = Display(ioSink);
display.myPrint("Hello world!");
verify(ioSink.write("Hello world!"));
});
}
class MockIOSink extends Mock implements IOSink {}
旁注:在带有JUnit 4的Java中,我使用了类似的东西:
System.out有一个PrintStream,我可以为其分配自己的Stream,例如ByteArrayOutPutStream。 后者具有.toString方法,我可以调用该方法来验证其内容。
@Test
public void testMyMessageToDisplay() throws Exception
{
ByteArrayOutputStream canvas = new ByteArrayOutputStream();
System.setOut(new PrintStream(canvas);
new Display().displayMyMessage("Hello world!");
Assert.assertEquals("Hello World!", canvas.toString("UTF-8"));
}
public static class Display {
public void displayMyMessage(String myMessage) {
System.out.println(myMessage);
}
}
答案 0 :(得分:2)
看看https://pub.dartlang.org/packages/test_process-它提供了许多不错的方法来验证流程的输出
请参阅自述文件中的示例:
<input name="myName" ng-model="myName" required>
<span ng-show="myForm.myName.$touched && myForm.myName.$invalid">please fill out this field</span>