2017-01-22 33 views
1

在接口默認方法編寫JUnit請幫助。怎樣寫的JUnit界面的默認方法

public interface ABC<T, D, K, V> { 
    default List<String> getSrc(DEF def, XYZ xyz) throws Exception { 
    } 
} 

ABC:接口名稱。 DEF和XYZ:類名

非常感謝

+0

人可以給我建議,在這個問題上的 – Jech

+1

可能的複製(HTTP:// stackoverflow.com/questions/25865616/should-we-do-unit-testing-for-default-methods-in-interfaces-java-8) – Arpit

+0

@Arpit,我檢查了它..我無法得到正確的答案。可以請你解釋我的例子 – Jech

回答

2

正如在回答表明,創建實現類的接口和測試,對於一個例子,我在你的ABC界面修改getSrc方法,如下:

import java.util.ArrayList; 
import java.util.List; 

public interface ABC<T, D, K, V> { 

    default List<String> getSrc(DEF def, XYZ xyz) { 
     final List<String> defaultList = new ArrayList<>(); 
     defaultList.add("default"); 
     defaultList.add("another-default"); 
     return defaultList; 
    } 
} 

創建了一個實現類一樣,您也可以選擇創建另一個方法調用父類方法,寫@Test兩個,因爲我做:

import java.util.List; 

public class ABCImpl implements ABC<String, Integer, String, Integer> { 

    public List<String> getSrcImpl(DEF def, XYZ xyz) { 
     final List<String> list = getSrc(def, xyz); 
     list.add("implementation"); 
     return list; 
    } 
} 

爲實現相應的測試類如下:

import static org.hamcrest.MatcherAssert.assertThat; 
import static org.hamcrest.Matchers.empty; 
import static org.hamcrest.Matchers.is; 
import static org.hamcrest.Matchers.not; 
import static org.hamcrest.Matchers.contains; 
import java.util.Collection; 
import java.util.List; 

import org.junit.Before; 
import org.junit.Test; 

public class ABCImplTest { 

    private ABCImpl abcImpl; 

    @Before 
    public void setup() { 
     abcImpl = new ABCImpl(); 
    } 

    @Test 
    public void testGetSrc() throws Exception { 
     List<String> result = abcImpl.getSrc(new DEF(), new XYZ()); 
     assertThat((Collection<String>) result, is(not(empty()))); 
     assertThat(result, contains("default", "another-default")); 
    } 


    @Test 
    public void testABCImplGetSrc() throws Exception { 
     List<String> result = abcImpl.getSrcImpl(new DEF(), new XYZ()); 
     assertThat((Collection<String>) result, is(not(empty()))); 
     assertThat(result, contains("default", "another-default", "implementation")); 
    } 
} 
+0

非常感謝。有效。 – Jech

+1

@Jech接受它的工作答案 - http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Arpit

+0

嗨,我還有一個prblm,如何爲此設置值hashmap和模擬它Map > uuidSourceMp = new HashMap <>(3); – Jech

0

您可以創建一個實現你的接口類或讓你的測試執行。第二個似乎是一個更短的解決方案:?我們應該做接口(Java 8)的默認方法單元測試]

public class FunctionCallingTransactionTemplateTest implements FunctionCallingTransactionTemplate { 
    private final Object object = Mockito.mock(Object.class); 

    @Test 
    public void should_invoke_function() throws Exception { 
     // given 
     when(object.toString()).thenReturn("salami"); 

     // when 
     String result = functionCallingTransactionTemplate().execute((status) -> object.toString()); 

     // then 
     assertThat(result).isEqualTo("salami"); 
    } 
}