2

我正在使用 jmock 来模拟一个 OutputStream 并对写入它的数据设置期望。

所以我有一个看起来像这样的期望

oneOf(stream).write(byteArrayMatching("Some string"));

( byteArrayMatching) 是自定义匹配器的工厂。

这一切都很好,除非测试失败,因为被测类写入了不正确的数据,我得到一个看起来像这样的错误:

java.lang.AssertionError: unexpected invocation: stream.write([<60>, <63>, ...])

通过查看字节序列很难确定数据到底出了什么问题(我还没有开始记住 ASCII)。这几乎迫使我在调试器中运行测试以找出问题所在。

我的问题是:有没有办法以某种方式注册各种格式化程序与模拟对象或模拟对象可以漂亮地打印参数值?很明显,jmock 已经在做一些漂亮的打印,因为上面不是 的输出byte[].toString(),但是我在 API 文档中找不到任何建议定制这种漂亮打印逻辑的方法

4

2 回答 2

0

可爱的答案是,模拟对您定义的类型更有意义,它具有一些域结构,而不是外部 API。

下一个答案是查看新版本的 Hamcrest,其中包括对报告不匹配的支持。

除非涉及序列,否则下一个答案是,在这种情况下,使用内存中的字节流并在之后断言字符串可能会更好。

也请提出问题:)

于 2009-09-05T11:51:41.657 回答
0

在当前的 (2.5.1) jMock 库中目前没有办法做到这一点。我建议您记录对 jMock的增强。

于 2009-07-30T15:31:09.067 回答