Java 为单元测试生成值

Java 为单元测试生成值,java,unit-testing,Java,Unit Testing,我想按类生成唯一的、可重复的、简单的值。这是我为验证JavaBean而编写的内容的一部分,即firePropertyChange()的实现是正确的 我已经开始按照 class TestValueGenerator { private int counter; public Object getNextValue(Class<?> type) { counter++; if (type == byte.class) { retur

我想按类生成唯一的、可重复的、简单的值。这是我为验证JavaBean而编写的内容的一部分,即firePropertyChange()的实现是正确的

我已经开始按照

class TestValueGenerator {
   private int counter;
   public Object getNextValue(Class<?> type) {
      counter++;
      if (type == byte.class) {
          return (byte)counter;
      } else if (type == short.class) {
          return (short)counter;
      } ... 
      // int, long, float, double, String, Date etc... 
   }
}
问题:

  • 是否有任何内置Java方法或外部库来实现这一点?我是否在重新发明轮子

您正在寻找的是基于属性的测试。它不是JDK内置的,但有一些框架已经做到了这一点:


可能是其他的。

虽然OpenPojo确实使用了日期种子来随时间保持随机性,但它并不阻止您过度使用它注册的生成器。 例如,要提供您自己的字节/字节生成器,只需创建一个实现的类,并在框架中注册它:

RandomGeneratorService service = ServiceRegistrar.getRandomGeneratorService()
service.registerRandomGenerator(new MyByteRandomGenerator());
例如,请参见使用PODAM

PODAM是一个轻量级工具,用于自动向JavaPOJO中填充数据。这在开发单元测试时非常方便。多亏了PODAM,用户现在有了一个一行程序来完成他们所有的工作。 例:

PodamFactory工厂=新的PodamFactoryImpl();

列出一个大体上不错的主意,我也在考虑同样的事情。但实际上我认为,这不是纯粹的单元测试,因为它依赖于随机值。顺便说一句,看看Java内置的计数器生成器,但它有随机数generator@Andremoniy假设对getNextValue()的调用是以确定的顺序进行的,这可以通过在(at)Before方法中实例化fresh TestValueGenerator来确保,那么测试将不会是随机的,我相信仍然符合纯单元测试状态:)
RandomGeneratorService service = ServiceRegistrar.getRandomGeneratorService()
service.registerRandomGenerator(new MyByteRandomGenerator());
PodamFactory factory = new PodamFactoryImpl();
List<AuthorDoc> authorDocs = factory.manufacturePojo(ArrayList.class, AuthorDoc.class);