我正在使用jmock来模拟OutputStream并设置对写入数据的期望。
所以我期待看起来像这样
oneOf(stream).write(byteArrayMatching("Some string"));
(byteArrayMatching
)是自定义匹配器的工厂。
这一切都运行正常,除非测试失败,因为测试中的类写错了数据,我得到一个错误,看起来像这样:
java.lang.AssertionError: unexpected invocation: stream.write([<60>, <63>, ...])
通过查看字节序列来确定数据的确切错误是非常困难的(我还没有记住ASCII)。这几乎迫使我在调试器中运行测试以找出错误。
我的问题是:有没有办法以某种方式使用模拟对象或可以打印参数值的Mockery对象注册各种格式化程序?很明显jmock已经做了一些漂亮的打印,因为上面的内容不是byte[].toString()
的输出,但我在API文档中找不到任何可以提供定制这种漂亮打印逻辑的方法
答案 0 :(得分:0)
目前无法在当前(2.5.1)jMock库中执行此操作。我建议你log an enhancement到jMock。
答案 1 :(得分:0)
可爱的答案是,模拟对于您定义的类型更有意义,它具有一些域结构,而不是外部API。
下一个答案是查看新版本的Hamcrest,其中包括支持报告不匹配的内容。
下一个答案,除非涉及到序列,否则在这种情况下,最好使用内存中的字节流并在之后断言字符串。
并提出问题,请:)