加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 你如何模拟输出流?

发布时间:2020-12-14 05:26:55 所属栏目:Java 来源:网络整理
导读:通过’输出蒸汽’我的意思是任何接收字节序列或任何字符的对象.所以,java.io.OutputStream,还有java.io.Writer,javax.xml.stream. XMLStreamWriter的writeCharacters方法等等. 我正在为一个类编写基于模拟的测试,其主要功能是将数据流写入其中之一(XMLStream
通过’输出蒸汽’我的意思是任何接收字节序列或任何字符的对象.所以,java.io.OutputStream,还有java.io.Writer,javax.xml.stream. XMLStreamWriter的writeCharacters方法等等.

我正在为一个类编写基于模拟的测试,其主要功能是将数据流写入其中之一(XMLStreamWriter,因为它发生).

问题是数据流是写入一系列对write方法的调用,但重要的不是调用,而是数据.例如,给出一个XMLStreamWriter,这些:

out.writeCharacters("Hello,");
out.writeCharacters("world!");

相当于此:

out.writeCharacters("Hello,world!");

真的没关系(为了我的目的)发生.会有一些特定的调用顺序,但是我不在乎它是什么,所以我不想写这个特定顺序的期望.我只是希望能够以某种方式写出一定数量的数据.

一个选择是切换到基于状态的测试.我可以在缓冲区中累积数据,并对其进行断言.但是,由于我正在编写XML,这意味着要做一些比较复杂和丑陋的断言.嘲笑似乎是一个更好的方式来处理更大的编写XML的问题.

那么我怎么用这个模拟呢?

我使用Moxie嘲笑,但我有兴趣听到任何嘲笑图书馆的方法.

解决方法

测试输出或输入流的一个相当优雅的策略是使用PipedInputStream和PipedOutputStream类.您可以在测试的设置中将它们连线在一起,然后检查执行目标方法后的内容.

您可以从另一个方向准备一些输入,然后让测试从输入流读取这个准备的数据.

在您的情况下,您可以使用PipedOutputStream模拟“out”变量,并通过以下方式将PipedInputStream插入:

private BufferedReader reader;

@Before
public void init() throws IOException {
    PipedInputStream pipeInput = new PipedInputStream();
    reader = new BufferedReader(
            new InputStreamReader(pipeInput));
    BufferedOutputStream out = new BufferedOutputStream(
            new PipedOutputStream(pipeInput))));
    //Here you will have to mock the output somehow inside your 
    //target object.
    targetObject.setOutputStream (out);
    }


@Test
public test() {
    //Invoke the target method
    targetObject.targetMethod();

    //Check that the correct data has been written correctly in 
    //the output stream reading it from the plugged input stream
    Assert.assertEquals("something you expects",reader.readLine());
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读