有没有办法清除JAVA中对象的所有字段?

有没有办法清除JAVA中对象的所有字段?,java,unit-testing,junit,Java,Unit Testing,Junit,我正在测试一个具有多个字段的对象。每次我都会设置不同的属性并测试对象 Processor processor =new Processor(); TradeData tradeData = new TradeData(); //case 1 tradeData.setIndex("1"); tradeData.setName("abc"); processor.process(tradeData); Assert.assertEquals("def",tradeData.getC

我正在测试一个具有多个字段的对象。每次我都会设置不同的属性并测试对象

 Processor processor =new Processor();
 TradeData tradeData = new TradeData();

 //case 1
 tradeData.setIndex("1");
 tradeData.setName("abc");
 processor.process(tradeData);
 Assert.assertEquals("def",tradeData.getCategory());

 //Case 2
 tradeData.setCity("1");
 tradeData.setSystem("abc");
 processor.process(tradeData);
 Assert.assertEquals("fgh",tradeData.getCategory());

像wise am测试一样,它可以测试多种情况。是否有办法在每个案例之前清除tradeData的属性。有没有像obj.clear()这样的方法或类似的方法。我不想在每个案例之前声明新的()对象。

不,没有这样的事情

您可以在测试类中创建一个帮助器方法来执行此操作,即:

public void clearObject(TradeData tradeData)
{
   tradeData.setCity(null);
   tradeData.setSystem(null);
   ...
}

当您考虑在测试中清除对象的状态时,这通常是代码气味

您可能应该使用编写测试来设置每个测试

Processor processor;
TradeData tradeData;

@Before 
public void initialize() {
  processor = new Processor();
  tradeData = new TradeData();
}

@Test
public void case1() {
  tradeData.setIndex("1");
  tradeData.setName("abc");
  processor.process(tradeData);
  Assert.assertEquals("def",tradeData.getCategory());
}

@Test
public void case2() {
  tradeData.setCity("1");
  tradeData.setSystem("abc");
  processor.process(tradeData);
  Assert.assertEquals("fgh",tradeData.getCategory());
}

如果这是用于单元测试,请添加一个带有@Before注释的方法,在该方法中初始化文本中使用的类变量。如果在测试之间保留对象,这会不会使测试相互依赖?这似乎有问题。你可以使用反射,但如果有其他选择,使用反射是一个好主意。你为什么不想创建一个新对象?我只是想知道是否有内置方法将所有字段设置为null。由于这是不可能的,我将使用建议的帮助器方法将字段设置为null。很好的一个方法将利用它。谢谢这正是
@Before
的用途!您不必在之前使用
处理器=新处理器();TradeData TradeData=新的TradeDate()也可以。