2016-10-17 53 views
2

我正在尝试为我的方法创建一些JUnit测试,并且我被告知需要为每个方法执行测试。我知道这对于初学者来说只是做一些积极的测试是一个陷阱,那么我怎么能比我已经有的测试这个方法呢?同样,我的两种测试方法都基本上测试相同的东西。这将是一个负面测试的例子,或者是多余的工作?Junit整个或冗余测试? (基本)

public static MemberCont getInstance() { 
    if(instance == null) { 
     instance = new MemberCont(); 
    } 
    return instance; 
} 

@Test 
public void getInstance() { 
    assertNotNull(memberCo1.getInstance()); 
    assertEquals(true, memberCo1.getInstance() != null); 
} 
+0

_“我想创造我的方法的一些JUnit测试,并有人​​告诉我这样做对每个单独的方法。 “_这是一个不好的建议,你应该为每一个**行为创建单元测试**。 –

+0

你写的测试就足够了。您正在测试的方法不应该有其他行为 - 您将返回实例引用。 – duffymo

+0

您的受测试类实现了_“Java Singelton模式”_这也是一种误解。 –

回答

0

单元测试要始终代表它们的结构是三个部分:安排行为断言。同样,每个期望的行为都应该有自己的测试。因此,您的测试应该LILE本(基于@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); 
} 
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()); 
} 

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