在接口默認方法編寫JUnit請幫助。怎樣寫的JUnit界面的默認方法
public interface ABC<T, D, K, V> {
default List<String> getSrc(DEF def, XYZ xyz) throws Exception {
}
}
ABC:接口名稱。 DEF和XYZ:類名
非常感謝
在接口默認方法編寫JUnit請幫助。怎樣寫的JUnit界面的默認方法
public interface ABC<T, D, K, V> {
default List<String> getSrc(DEF def, XYZ xyz) throws Exception {
}
}
ABC:接口名稱。 DEF和XYZ:類名
非常感謝
正如在回答表明,創建實現類的接口和測試,對於一個例子,我在你的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"));
}
}
您可以創建一個實現你的接口類或讓你的測試執行。第二個似乎是一個更短的解決方案:?我們應該做接口(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");
}
}
人可以給我建議,在這個問題上的 – Jech
可能的複製(HTTP:// stackoverflow.com/questions/25865616/should-we-do-unit-testing-for-default-methods-in-interfaces-java-8) – Arpit
@Arpit,我檢查了它..我無法得到正確的答案。可以請你解釋我的例子 – Jech