单元测试中的初始化

时间:2017-10-23 03:04:31

标签: java unit-testing junit

我是Java的新手,并通过JUnit进行单元测试。我很好奇如果在测试类的开头只初始化每个特定测试副中的对象是不好的做法,如果只是为了从重复代码中保存自己。例如:

public class MyTest {
    @Test
    public void defaultObj() {
        Obj d = new Obj();
        String name = "";
        assertEquals(name, d.getName());
    }

VS

public class MyTest {
    Obj d = new Obj();
    String name = "";    

    @Test
    public void defaultObj() {
        assertEquals(name, d.getName());
    }

同样,假设我有多个单元测试,我会在每个单元中调用Obj d = new Obj();。我觉得后者更合适。但是,我认为前者更明确,因为每个intiailizaton都是本地化的(对吗?),如果我有Obj的多个构造函数,我的初始化将开始堆叠。

这里有最佳实践成语吗?或者是否可接受?

2 个答案:

答案 0 :(得分:1)

您可以使用@Unfore和@After等JUnit注释

attr_accessor

答案 1 :(得分:1)

您可以做的最好的事情是在类级别声明您要测试的对象(在本例中为Obj)。然后,在@Before方法中调用构造函数。

最好在方法中声明name属性,因为我认为它不会在每个方法中使用。

public class MyTest {
  private Obj d;

  @Before
  public void defaultObj() {
    d = new Obj();
  }

  @Test
  public void defaultObj() {
    String name = "";
    assertEquals(name, d.getName());
  }
}