单元测试应该取决于样本

时间:2017-02-13 12:36:24

标签: java unit-testing

我正在为一个实体创建一个单元测试,让我们说MyEntity。 为了测试,我使用了在测试中创建的这个实体的样本。 我知道测试必须彼此独立。 为此目的创建的示例对象怎么样? 测试是否也应与其使用的样本无关?

让我举个例子:

public class MyEntity {
  private List<OtherEntity> otherEntities = new ArrayList<>();
  ...
}

public class MyEntityServiceTest {
  private MyEntity myEntitySample;
  private OtherEntity otherEntitySample;

  @Before
  public void setUp() throws Exception {
    otherEntitySample = new OtherEntity();
    otherEntitySample.setId(22);
    myEntitySample = new MyEntity();
    myEntitySample.setId(11);
    myEntitySample.addOtherEntity(otherEntitySample);
  }

  @Test
  public void findByOtherEntityId() {
    MyEntity myEntityResult = myEntityService.findByOtherEntityId(otherEntitySample.getId());
    assertEquals(myEntityResult.getOtherEntities().get(0).getId(), otherEntitySample.getId());
  }
}

在这个例子中,我测试了找到的MyEntity对象的第一个OtherEntity项确实与被搜索对象具有相同id(22)的行为。在我的情况下这是正确的,因为我使用的示例实际上只有一个OtherEntity对象作为属性。

所以,我的测试在使用这些样本时通过。如果我要更改我的样本并使用一个MyEntity对象,该对象包含相同的OtherEntity对象,但是作为otherEntities列表中的第二个项目,则测试将失败,即使它不应该。

我应该保持原样,还是应该更改它以便测试方法的一般行为?

我希望这不会太混乱。

0 个答案:

没有答案