5

我的应用程序连接到 db 并从这里获取类别树。在调试机制中,我可以看到这个大树对象,我只是想到了将这个对象保存在磁盘上某个位置以在测试存根中使用的能力。像这样:

mockedDao = mock(MyDao.class);
when(mockedDao.getCategoryTree()).thenReturn(mySavedObject);

假设mySavedObject- 足够大,所以我不想手动生成它或编写特殊的生成代码。我只是希望能够在调试会话期间对其进行序列化并将其保存在某处,然后对其进行反序列化并传递给thenReturn测试。有标准的方法吗?如果不是,如何更好地实施这种方法?

4

4 回答 4

2

喜欢你的想法,太棒了!

我不知道有哪个库可以开箱即用地提供该功能。如果你的对象都实现了,你可以尝试使用ObjectOutoutStreamand ObjectInputStream(即标准的 Java 序列化)Seriablizable。通常他们不会。在这种情况下,您可能会更幸运地使用XStream或其朋友之一。

于 2009-11-27T00:56:36.747 回答
1

我们通常模拟整个 DB 是这样的场景,重用(并隐式测试)代码以从 DB 加载类别。

具体来说,我们的单元测试针对内存数据库 ( hsqldb ) 运行,我们在每次测试运行之前通过导入测试数据对其进行初始化。

于 2009-11-27T01:20:56.997 回答
0

查看Dynamic Managed Beans - 这提供了一种更改正在运行的 java 应用程序的值的方法。也许有一种方法可以定义一个 MBean 来保存你的树、读取树、将它存储在某个地方并稍后再次注入它。

于 2009-11-26T13:51:59.927 回答
0

我遇到了同样的问题并考虑了可能的解决方案。几个月前,我编写了自定义代码以将大型二进制对象打印为十六进制编码字符串。我的 toJava() 方法返回一个字符串,它是所需对象的字段定义的源代码。这并不难实现。我放入日志语句以将结果打印到日志文件,然后从日志文件剪切并粘贴到测试类。新的单元测试引用了该文件,使我能够深入研究很难以另一种方式构建的对象上的操作。

这非常有用,但我很快就达到了编译单元中字节码大小的限制。

于 2020-12-21T13:10:58.353 回答