Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何组织昂贵对象的测试_Java_Unit Testing_Junit - Fatal编程技术网

Java 如何组织昂贵对象的测试

Java 如何组织昂贵对象的测试,java,unit-testing,junit,Java,Unit Testing,Junit,我有一个我想用JUnit测试的类a。创建类型为A的对象需要大量IO,因此大约需要5秒钟 A是可变的,我想测试改变A的不同方法。现在我处于某种两难境地: 如果我为每个测试方法创建一个处女对象,那就太长了 创建一个包含大量断言的大型测试方法来隔离可能错误的原因似乎不是一个好主意 在每次试验方法后“修复”A类物体似乎也很危险,因为如果修复不正确,其他试验方法可能会在没有适当理由的情况下失败 我还可以为每个测试方法创建一个实例的深度副本,但这意味着我必须更改类a才能正确地测试它 你有什么建议?5。从构造

我有一个我想用JUnit测试的类a。创建类型为A的对象需要大量IO,因此大约需要5秒钟

A是可变的,我想测试改变A的不同方法。现在我处于某种两难境地:

  • 如果我为每个测试方法创建一个处女对象,那就太长了
  • 创建一个包含大量断言的大型测试方法来隔离可能错误的原因似乎不是一个好主意
  • 在每次试验方法后“修复”A类物体似乎也很危险,因为如果修复不正确,其他试验方法可能会在没有适当理由的情况下失败
  • 我还可以为每个测试方法创建一个实例的深度副本,但这意味着我必须更改类a才能正确地测试它

  • 你有什么建议?

    5。从构造函数中删除所有“实际工作”,这样可以更便宜地实例化它。请参阅。实际上,不是构造函数如此昂贵,而是读取一些数据以获得一个真实(非空)对象。您认为最好将深度副本放在池中。如果你不想改变类,那么就使用反射。因此,读取一次数据,将其保存在不可变的位置,并在每次需要构造实例时将其注入构造函数中。从构造函数中删除所有“实际工作”,这样可以更便宜地实例化它。请参阅。实际上,不是构造函数如此昂贵,而是读取一些数据以获得一个真实(非空)对象。您认为最好将深度副本放在池中。如果您不想更改类,请使用反射。因此,请读取一次数据,使其保持不变,并在每次需要构造实例时将其注入构造函数。