整个Junit还是冗余测试? (基本)

时间:2016-10-17 11:23:58

标签: java unit-testing junit

我正在尝试为我的方法创建一些JUnit测试,并且我被告知要为每个方法执行此操作。我知道初学者只做正面测试是一个陷阱,那么我怎么能比现有的更多地测试这种方法呢?我的两种测试方法基本上都测试了同样的东西。什么是负面测试的例子或多余的工作?

@Component({
  selector: 'relative-path',
  template: require('view.html')
})
public static MemberCont getInstance() {
    if(instance == null)  {
       instance = new MemberCont();
    }
    return instance;
}

2 个答案:

答案 0 :(得分:2)

你显然试图实现Singleton Pattern(没有正确编写BTW,请检查this),所以要测试的最重要的事情是你总是获得完全相同的实例,所以你的测试应该是这样的:

@Test
public void getInstance() {
    assertNotNull(MemberCont.getInstance());
    // Make sure that we get the same instance between 2 subsequent calls
    assertSame(MemberCont.getInstance(), MemberCont.getInstance());
}

NB:这是static方法,因此您无需使用实例来调用它,只需像上面那样直接使用类名调用它。

答案 1 :(得分:0)

UnitTests应始终代表其结构,分为3部分:安排代理断言。此外,每个所需的行为都应该有自己的测试。所以你的测试应该看起来很敏感(根据@NicolasFilotto的回答):

@Test
public void getInstance__singleCall__NotNull() {
    // no "arrange" possible
    // act
    MemberCont cut = MemberCont.getInstance();
    // assert
    assertNotNull(cut);
}

@Test
public void getInstance__multipleCalls__alwaysTheSameObject() {
    // no "arrange possible
    MemberCont cut1 = MemberCont.getInstance();
    MemberCont cut2 = MemberCont.getInstance();
    assertTrue(cut1 == cut2);
}